Как загрузить «динамическое» значение из хранилища в TextInput при загрузке и обработать его onChangeText? - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно получить значение из магазина в редуксе к TextInput. Я знаю, что это может быть установлено value={this.props.Value}. Мне нужно сохранить это значение, чтобы сохранить его позже, поэтому я изменяю его, используя локальное состояние, например

value={this.state.Value}
onChangeText={text => {
  this.setState({
     Value: text
  })
}}

. И в конструкторе компонента я устанавливаю значение TextInput в локальное состояние

constructor(props) {
 super(props);
  this.state = {
    Value: this.props.Value
  }
}

Это прекрасно работает. Но теперь это Значение генерируется при загрузке этого компонента.

componentDidMount() {
  this.props.onLoadView();
}

onLoadView () отправит действие, которое сгенерирует новые данные Value в хранилище. Но функция конструктора вызывается перед componentDidMount (), что означает состояние компонента. Значение - это исходные данные в хранилище, а не новые. Если я верну значение value={this.props.Value}, чтобы исправить эту проблему, я не смогу обработать это значение, чтобы сохранить его позже.

Я знаю, что могу изменить onChangeText, чтобы обновить значение TextInput для немедленного сохранения. Но всякий раз, когда я не хочу сохранять это значение, я должен изменить его обратно на начальное значение. Есть ли более простой способ решить эту проблему?

Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2019

Как сказано в комментарии, вы можете использовать componentDidUpdate, чтобы проверить свои предыдущие реквизиты и сравнить их с теми, которые вы используете в своем компоненте:

componentDidUpdate = () => {
   if(this.props.Value !== this.state.Value) this.setState({Value : this.props.Value })
}

Поскольку вы храните предыдущий props.Value в вашем штате вы можете напрямую сравнить текущий реквизит с текущим состоянием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...