Почему изменение значения перед передачей в действие устанавливает значение параметра действия неопределенным? - PullRequest
0 голосов
/ 26 февраля 2020

Я создаю приложение с помощью React Native. В настоящее время у меня проблема с передачей значения в реквизит действия.

У меня есть вызов действия обновления формы в методе onChangeText компонента TextInput. Когда текст изменяется, я изменяю текст и передаю его действию обновления, например так:

onChangeText={value => {
   let frequency = value + ' ' + this.state.frequencyTerm; 
   console.log(frequency) // this is not undefined but expected value
   this.props.reminderFormUpdate({prop: 'frequency', frequency});
}

Однако, когда я проверяю значение, переданное функции remderFormUpdate (простой оператор console.log), он говорит, что значение не определено. Я также записал значение частоты перед передачей в действие, и это правильное значение. Так почему же это происходит?

Я обнаружил, что не изменяю значение, полученное из TextInput, и меняю строку на:

this.props.reminderFormUpdate({prop: 'frequency', value});

значение, полученное действием больше не является неопределенным, но, очевидно, это не значение, на которое я хочу установить свою частоту. Действие также отлично работает для других объектов, когда значение не видоизменяется перед передачей в функцию, но почему я не могу изменить значение?

Вот моя функция RemderFormUpdate (функция работает, как и ожидалось, с другими реквизитами, поэтому я не думаю, что это проблема):

export const reminderFormUpdate = ({prop, value}) => {
   return {
      type: 'REMINDER_FORM_UPDATE',
      payload: {prop, value},
   };
};

Заранее спасибо за вашу помощь :-)

1 Ответ

0 голосов
/ 26 февраля 2020
reminderFormUpdate = ({prop, value})

В этом блоке кода «значение» представляет свойство переданного объекта. Таким образом, prop и value - это не просто обычные параметры функции. Это имена свойств. Это называется " разрушение объекта ". подробнее

Итак, в чем здесь дело? Когда вы изменяете значение, вы передаете его в своей функции как «частоту». И когда вы деструктурируете переданный объект в вашем replyderFormUpdate, вы все равно ищете свойство «значение». Но теперь это «частота».

Так что вы должны сделать это так:

this.props.reminderFormUpdate({prop: 'frequency',value: frequency});

Или изменить его в своей функции RemderFormUpdate:

export const reminderFormUpdate = ({prop, frequency}) => {
   return {
      type: 'REMINDER_FORM_UPDATE',
      payload: {prop, frequency},
   };
};
...