Я пытаюсь инициализировать контролируемое поле в реакции, но я не знаю начальное значение во время построения.
Насколько я понимаю, даже если вы выполните setState, который вызывает повторную визуализацию, это не изменит значение элемента управления - хотя я не уверен, почему.
Итак, следующее не будет работать:
componentDidMount() {
... // code to get value
this.setState({ value: "hello world" });
return ( <input type="text" value={this.state.value} onChange={this.handleChange} />
}
Вместо этого я попытался отобразить ввод в обратном вызове setState, чтобы убедиться, что значение установлено:
componentDidMount() {
... // code to get value
this.setState({ value: "hello world" }, this.renderInput);
}
renderInput = () => {
this.input = ( <input type="text" value={this.state.value} onChange={this.handleChange} />
}
Примечание: моя форма включает {this.input)
Во втором примере моя форма отображается идеально, и ввод инициализируется. Однако потом вызывается функция onChange, хоть она и корректно обновляет состояние, изменение состояния не подхватывается — у меня поле ввода зависает, как будто onChange вообще не было.
Это действительно поставило меня в тупик, и я хотел бы знать, есть ли способ инициализировать мои поля без необходимости вызывать потенциально медленную функцию внутри конструкции.
<input>
отcomponentDidMount()
? Что делает вашthis.handleChange
? Вы можете включить свою функциюrender()
? - person Pipe   schedule 12.04.2018componentDidMount
когда-либо что-то даст. - person ecraig12345   schedule 13.04.2018handleChange
, так как, вероятно, проблема именно в этом. - person ecraig12345   schedule 13.04.2018