одно избыточное действие для управления несколькими элементами - PullRequest
0 голосов
/ 06 июня 2018

Итак, я хотел создать универсального создателя действий для управления предметами в магазине редуксов.

Допустим, мой магазин редуксов выглядит следующим образом:

one: '',
two: '',
three: ''

Мои создатели действий выглядят так:

export const setStatus = (name, status) =>{
    return function(dispatch){
        dispatch({
            type: 'SET_STATUS',
            name,
            status
        })
    }
}

и я не знаю, как создать действие, которое бы управляло всем этим.Попробовал

case 'SET_STATUS':{
            return{
                ...state,
                action.name: action.status 
            }
        }

Но редукс не даст мне.Есть ли обходной путь?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

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

import { createStore } from 'redux'; 

const reducer = (state={
  one: '',
  two: '',
  three: ''
} , action)=>{
switch(action.type){
    case "SET_STATUS":
        state = {
            ...state,
            one: action.payload.one,
            two: action.payload.two,
            three: action.payload.three
        }
    break;
    default: break;
 }
 return state;
}


const store = createStore(reducer);

store.subscribe(()=>{
    console.log(store.getState());
});
const data = {
  one: 'value of one',
  two: 'value of two',
  three: 'value of three'
}
store.dispatch({ 
  type:"SET_STATUS",
  payload: data
});
0 голосов
/ 06 июня 2018

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

case 'SET_STATUS':{
    return{
        ...state,
        [action.name]: action.status 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...