Два состояния - это нормально. Состояние вашего ребенка поддерживает текст во входных данных. Состояние вашего родителя - это фактический термин, который пользователь искал, верно? Я бы назвал их по-разному, чтобы было понятно, что у них разные цели, например, searchedTerm
в родительском элементе и value
в дочернем или что-то в этом роде. Одно изменяется при каждом нажатии на клавиатуре (значение в дочернем элементе, отображаемом во вводе), другое состояние - это фактический термин, который пользователь хочет найти (после щелчка).
Вы можете абсолютно передавать аргументы функции.
<button className={`button is-info is-medium`} onClick={() => this.handleClick(this.state.search)}>
Обратите внимание, я возвращаю функцию .... которая вызывает функцию, которую вы передали в props. Это не обязательно для вас, поскольку ваша функция принимает событие и уже делает это.
Теперь ... вы упомянули, что хотите очистить состояние в родительском компоненте, я не уверен, зачем вам хотите отправить аргумент, но вы просто передадите функцию дочернему элементу. у дочернего элемента будет свойство с именем clearClicked
, и дочерний элемент будет запускать его при нажатии кнопки.
Ребенок:
<button className={`button is-danger is-medium`} onClick={() => {
this.setState({ search: '' });
clearClicked(); // the function passed down as a prop
}
>
Родитель:
<SearchBar onUserClick={this.getSearchFromSearchBar}
search={this.state.search}
clearClicked={() => this.setState({ search: '' })}
/>