Я начинающий программист, пытающийся понять, как я должен иметь дело с состояниями внуков (или посмотреть, хорошо ли иметь внуки).React JS: Как установить состояния внуков
Мои вопросы ...
1. Можно ли изменить внукам через this.setState((prevState))
?
2. Имеет ли внуки состояние плохой идеи?
Чтобы проиллюстрировать это, вот конструктор компонента.
constructor(props) {
super(props);
this.state = {
input: {
example: "",
},
invalid:{
example: false
},
};
this.handleChange = this.handleChange.bind(this);
this.submit = this.submit.bind(this);
}
Я вижу this.state.invalid
как ребенок, и this.state.invalid.example
как внуку.
Это JSX.
<div className="input">
<input type="text" value={this.state.input.example || ''} onChange={this.handleChange} />
{ this.state.invalid.example ? <span> This input is invalid </span> : null }
</div>
//Here are similar input fields...
<button onClick={this.submit} type="button">Submit</button>
Когда onClick={this.submit}
обжигают, я хотел бы, чтобы подтвердить ввод данных в функции «this.submit».
submit(){
for (var key in this.state.input) {
if(!this.state.input[key]){
this.setState((prevState, key) => ({
invalid[key]:true, //This causes an error, saying that "SyntaxError: Unexpected token, expected ,"
}));
}
}
В этом примере this.state.invalid.example
предполагается установить (т.е. изменено), но выше код не работает.
Возможно, это будет лучшая идея разложить это приложение и сделать <div className="input">
одним компонентом. Прежде чем это сделать, я хотел бы уточнить, можно ли таким образом установить внуков.
Поскольку я не знаю никого вокруг меня, кто изучает ReactJS, любые советы будут оценены!
Возможный дубликат: http://stackoverflow.com/questions/18933985/this-setstate-isnt-merging-states-as-i-would-expect – forrert
Не совсем то, что я искал ... но это было очень информативный. Спасибо, что поделились ею! – Hiroki