Реагируйте на Redux, как изменить один элемент внутри состояния? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть вопрос к вам .. У меня есть объект, хранящийся в моем хранилище редуксов, этот объект содержит другой объект и массив объектов. Итак, мне нужно обновить одно поле внутри этого объекта и поддерживать весь объект и после того, как я сделаю запрос на публикацию, передав этот объект.

Мой объект (полезная нагрузка):

{
name: "test",
surname: " test2",
option: [
{
option1: "option1"
}}
]
additionalInfo: {
location: "street"
}

каждый элемент выводится на страницу с использованием поля ввода текста, как я могу сделать функция, которая onchange метод выбирает правильное поле и обновляет его?

function policies(state = initialState, action) {
  const { type, payload } = action;

  switch (type) {
    case policiesTypes.SET_POLICY_DETAILS:  
      return { ...state, content: payload };

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Решено от себя:

case policiesTypes.SET_POLICY_HEADER:
  let content = JSON.parse(JSON.stringify(state.content));
  content.policyHeader = content.policyHeader || {};
  content.policyHeader[action.key] = action.value;
  return { ...state,  content};

и действия:

const setPolicyHeader = (key, value) => ({type: policiesTypes.SET_POLICY_HEADER, key, value});

и onchange

onChange={ e => dispatch(actions.setPolicyHeader('localPolicyNumber', e.target.value))}
0 голосов
/ 11 марта 2020

Вы должны отправить в магазин. используйте store.dispatch в onChange, написанном как функцию. Это поможет вам изменить глобальное состояние магазина. А в переключателе редуктора это switch(action), а объект действия содержит action.type и action.payload. Когда вы непосредственно передаете тип действия в операторе переключения, вы можете не получить ожидаемых результатов.

например:
В вашем редукторе измените оператор переключения следующим образом:

switch(action){
case "YOUR_ACTION":
  return {...state, ...action.payload};
}      

В вашем файле индекса. js,

import store from 'react-redux';
...

onChange=(value)=>{
   store.dispatch({type:"YOUR_ACTION",payload:value});
}

Это очистит существующие значения объекта и обновит состояние новыми введенными вами значениями. И так как вы обновляете onChange, состояние может также очистить все предыдущие ключи, поэтому будьте осторожны при использовании его наChange.

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