У меня есть два компонента, список выбора с несколькими опциями и компонент кнопки
В пользовательском интерфейсе я хотел бы сделать так, чтобы пользователь мог выбрать любую опцию из списка выбора, которую он хочет, и затемнажмите кнопку, чтобы сбросить список для «выбора»
Я оставляю родительский компонент в качестве единственного источника правды - все обновленные состояния передаются обратно в родительский компонент, на самом деле у меня это работает отличнов контексте одного файла со следующим кодом:
class SelectList extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
this.props.onSelectListChange(e.target.value);
}
render() {
const selectedValue = this.props.selectedValue;
log.debug('SelectListValue(): ', this.props.selectedValue);
return (
<select value={selectedValue} onChange={this.handleChange}>
<option value='One'>One</option>
<option value='select'>select</option>
<option value='Three'>Three</option>
<option value='Four'>Four</option>
<option value='Five'>Five</option>
</select>
);
}
}
class SelectListReset extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
this.props.onResetChange('select');
}
render() {
return (
<div>
<button onClick={this.handleChange}>Reset list to select</button>
</div>
);
}
}
class Page extends Component {
constructor(props) {
super(props);
this.state={
selectedValue: 'select'
}
this.handleSelectedListChange = this.handleSelectedListChange.bind(this);
this.handleResetChange = this.handleResetChange.bind(this);
}
handleSelectedListChange(selectedValue) {
this.setState({selectedValue});
}
handleResetChange() {
this.setState({selectedValue: 'select'});
}
render() {
log.debug('render(): ', this.props);
log.debug('ParentListValue(): ', this.state.selectedValue);
return (
<div className="content-area">
<div className="container">
<h1>{LANGUAGES_CONTROLLER.format(this.props.languages, 'TitleSettings')}</h1>
<div>
<SelectList
onSelectListChange={this.handleSelectedListChange}
selectedValue={this.state.selectedValue}
/>
<SelectListReset
onResetChange={this.handleResetChange}
selectedValue={this.state.selectedValue}
/>
</div>
</div>
</div>
);
}
Но то, что я на самом деле хотел бы сделать, это переместить кнопку сброса в свой собственный файл, и я упал, пытаясь передать реквизит/ state обратно к родителю.
Таким образом, метод рендеринга на самом деле будет выглядеть так:
render() {
log.debug('render(): ', this.props);
log.debug('ParentListValue(): ', this.state.selectedValue);
return (
<div className="content-area">
<div className="container">
<h1>{LANGUAGES_CONTROLLER.format(this.props.languages, 'TitleSettings')}</h1>
<div>
<SelectList
onSelectListChange={this.handleSelectedListChange}
selectedValue={this.state.selectedValue}
/>
<TestComponent
onResetChange={this.handleResetChange}
selectedValue={this.state.selectedValue}
/>
</div>
</div>
</div>
);
}
Я импортирую TestComponent, а затем внутри TestComponent будет мой код для компонента SelectListResetно проблема у меня в том, что теперь значения отправляются в него в качестве реквизита, который должен быть неизменным прямо, поэтому не может быть обновлен?
ThaНа этом мое понимание прекращается ... если кто-то может указать мне правильное направление на этом, я был бы очень благодарен!