2016-10-06 1 views
3

Я изучаю Think in React, но не понимаю, почему в SearchBar в этом примере должны быть value={this.props.filterText} и checked={this.props.inStockOnly}, jsFiddle по-прежнему работает без них, и нет смысла, чтобы реквизит передавался в SearchBar как Поиск - это тот, который обрабатывает пользовательский ввод и вносит изменения в состояние. Пользовательский ввод будет отражен в значении ввода без его установки на this.props.filterText, так почему он?Какова цель передачи реквизитов в панель поиска React?

var SearchBar = React.createClass({ 
    handleChange: function() { 
    this.props.onUserInput(
     this.refs.filterTextInput.value, 
     this.refs.inStockOnlyInput.checked 
    ); 
    }, 
    render: function() { 
    return (
     <form> 
     <input 
      type="text" 
      placeholder="Search..." 
      value={this.props.filterText} 
      ref="filterTextInput" 
      onChange={this.handleChange} 
     /> 
     <p> 
      <input 
      type="checkbox" 
      checked={this.props.inStockOnly} 
      ref="inStockOnlyInput" 
      onChange={this.handleChange} 
      /> 
      {' '} 
      Only show products in stock 
     </p> 
     </form> 
    ); 
    } 
}); 
+0

Вы делаете большую точку. Пример путается, однако было бы полезно, если бы у вас были реквизиты, чтобы вы могли создать экземпляр SearchBar со значением по умолчанию от родителя, например '' – azium

ответ

0

Потому что вам понадобится введенное значение из строки поиска в верхний компонент. Например, если вам нужно отфильтровать коллекцию на основе заданного значения (через строку поиска), фильтрация произойдет на верхнем компоненте, а не на панели поиска. Панель поиска предназначена только для ввода. Мы помещаем значение строки поиска из реквизита, чтобы убедиться, что значения выровнены.

+0

, но значение уже будет выровнено, потому что пользователь вводит значение в searchBar уже, зачем ему нужно перейти в состояние, а затем вернуться в searchBar? – stackjlei

0

В данном примере показан пример использования управляемого входа от родительского компонента. Как вы видите

<input 
     type="text" 
     placeholder="Search..." 
     value={this.props.filterText} 
     ref="filterTextInput" 
     onChange={this.handleChange} 
    /> 

Здесь значение ввода устанавливается в {this.props.value} и в функции handlechange ты onUserInput функция, которую вы проверяете снова передается в качестве опоры к Searchbar. Это вызывает функцию handleUserInput ni для компонента FilterableProductTable и устанавливает состояния filterText, inStockOnly, и только они передаются в качестве реквизитов для компонента Searchbar. Таким образом, хотя вы можете обойтись без него, но контролируемый вход - это путь, который можно использовать в большинстве случаев, поскольку мы принимаем значение, предоставленное пользователем, и обновляем значение поддержки компонента <input>. Этот шаблон упрощает реализацию interfaces that respond to or validate user interactions. т. е. если вы хотите проверить правильность ввода поля или наложить ограничения на входное значение, то его легче сделать с управляемым входом

+0

Почему это путь? – stackjlei

+0

см. Редактирование.Я добавил некоторые разъяснения –

+0

, вы можете проверить взаимодействие пользователя через сам реагирующий компонент через правую кнопку HandChange? почему он должен пройти весь путь, чтобы заявить о себе и вернуться к проверке? – stackjlei

1

Реакт имеет концепцию контролируемых компонентов. Управляемый компонент означает, что его значение задано по состоянию (а не наоборот, например, состояние, заданное значением компонента).

Рассмотрим следующий пример:

class SearchBar extends Component { 
    constructor(props) { 
     super(props); 
     this.state = {term : ''}; 
    } 
    render() { 
     return (
      <div> 
      <input value={this.state.term} onChange = {event => this.setState({term : event.target.value}) }/> 
      </div> 
     ); 
    } 
} 

В приведенном выше примере <SearchBar /> представляет собой контролируемый компонент.

После будет последовательность событий:

  1. Вы набираете 'ABC' в поле ввода.
  2. В это время значение поля ввода не изменяется. Скорее, состояние компонента меняется из-за нашего кода в onChange Событие.
  3. Поскольку состояние компонента изменяется, компонент визуализируется снова. И теперь значение компонента становится «abc».

Это понятие становится более важным, когда мы используем перевождь, действия и т.д.

+0

, но почему вы хотите, чтобы он был установлен по статусу? как это хорошо с redux? – stackjlei

+0

Я не уверен, что понял ваш вопрос. Если вы имеете в виду, почему state vs prop, это может помочь: https://github.com/uberVU/react-guide/blob/master/props-vs-state.md. – kamal

+0

«Почему вы хотите, чтобы он был установлен по состоянию» - я думаю, что в этом примере он служит только для объяснения концепции контролируемого компонента больше всего на свете. И это очень важная концепция в React. Я думаю, вы по достоинству оцените это больше, когда будете читать больше о сокращениях, действиях и т. Д. – kamal