Могу ли я использовать диспетчер как setState в этой проблеме? - PullRequest
0 голосов
/ 05 февраля 2020

Я конвертировал это приложение в Redux, но пользовательская функция дескриптора использует {name, value} = event.target

  handleChange = event => {      
      const { name, value } = event.target;

      this.setState({
          [name] : value
      });
  }

здесь они принимают один обработчик для всех полей динамически, но в моем случае istead из setState я использовал диспетчеризацию «response-redux hooks»

     this.setState({
          [name] : value
      });

     dispatch(reducerName({
          type: 'SET_NAME / SET_EMAIL / SET_any_other_fiels',
          payload: value
      })

решение, которое у меня есть, это сделать handleChange [тип] для каждого поля, или я могу сделать что-то еще? у меня есть поле для

let initialState = {
   name,
   email,
   walletid:'',
    payout:0,
    bank:{          
      bank: 0,
      expenditures: 0,
      fees: 0,
      income: 0,
      receipts: 0,
      rejected: 0          
    }
}
i want to share the single case in reducer to add all fields 

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вы можете напрямую передать ключ, значение в полезную нагрузку и использовать их в редукторе.

 var payload = {
           name: name,
           value: value
          }

 dispatch(reducerName({
              type: 'SETFIELDS',
              payload: payload
          })

const reducer = (state = initialState, action) => {
    if (action.type == 'SETFIELDS') {
            // Return new modified state
            return {
                ...state,
                [action.payload.name]: action.payload.value
            };
        }
        // Default
        return state;
}
0 голосов
/ 05 февраля 2020

Вы уверены, что хотите, чтобы onChange изменил глобальные значения хранилища?

В любом случае, если это то, для чего вы хотите sh - как насчет этого:

const reducer = (state = initialState, action) => {
    if (action.type.startsWith('SET')) {
            // Get all parts expect SET part (for example ['ANY', 'OTHER', 'FIELD'])
            const actionKeyArr = action.type.split('_').slice(1);
            // Make it one long string, as saved on initial state (for example 'anyotherfield')
            const keyToChange = actionKeyArr.join('').toLowerCase();

            // Return new modified state
            return {
                ...state,
                [keyToChange]: action.payload
            };
        }

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