Можете ли вы положить свой код в коды andbox?
Из вашего описания кажется, что ваш родительский компонент впервые отрисовал с начальным правильным значением, но не смог повторно отрендерить новое значение после состояния в обновлениях хранилища избыточности.
Это часто случается, когда значение, которое вы хотите обновить, не имеет прямой ссылки на хранилище приставок.
Если вы не понимаете, что я только что сказал, вот пример:
В родительском компоненте у вас может быть следующий код:
class Parent extends Component{
state={name:this.props.name}
render(){
<input value={this.state.name} onChange=
{this.onChange.bind(this)} />
}
}
В этом примере вы инициализируете свое состояние для первого рендера, но после первого рендеринга родительский компонент не имеет отношения к избыточному хранилищу, он становится неуправляемым компонентом.
Эртан сказал, используя componentWillReceiveProps
. Многие люди делают это. Они инициализируют локальное состояние с внешнего реквизита, а затем используют componentWillReceiveProps
для обновления локального состояния.
Но это не рекомендуется, и этот метод жизненного цикла теперь не рекомендуется, поскольку он может привести к потенциальным ошибкам. см. здесь для получения дополнительной информации: https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
Таким образом, решение вашей проблемы на самом деле очень просто:
Не инициализировать значение в локальном состоянии. Дайте значению прямую ссылку на магазин редуксов. Например:
class Parent extends Component {
state={
name:null //do not give it a value from external props
}
render(){
<input value={this.props.name} onChange={this.props.onChange} />
}
}
Надеюсь, это поможет.
Спасибо.