在反应中,如何在动作创建者中访问状态?

时间:2017-04-19 21:29:40

标签: reactjs state react-redux redux-thunk

我的商店包含一个数组,当用户点击按钮时,我会向其添加新项目。这些项目的内容取决于商店其他地方设置的标志。

例如,如果用户之前已启用“设置X”,则新数组项应包含{ type: 'x'}而不是默认{type: 'y'}

我理解如何调度动作来执行新数组项的添加,但我无法弄清楚如何编写状态其他部分的动作。

我的问题:

  1. 我真的需要在这里使用redux-thunk吗?我找不到一个不会最终落后于它的SO答案。

  2. 我是React的新手,想了解为什么这不是默认的。这是因为状态可以以某种方式在用户点击按钮和被调度的动作之间发生变化吗?

  3. 有没有更明显的/ hacky方法我不想这样做?我尝试在ownProps中使用mapDispatchToProps,但ownProps似乎只包含connect()和“设置X”提供的道具而不是提供的。

2 个答案:

答案 0 :(得分:3)

我不了解您的要求,但如果您只是想通过某些设置更新商店,可以试试这个:

  1. 创建一个更改设置的操作,并使用reducer保存商店中的设置

    dispatch({
      type: 'CHANGE_SETTING',
      flag: X,
    })
    
  2. 使用redux-thunk创建另一个操作, 它可以使用getState从商店获取设置,

    const updateArrayBySetting = (dispatch, getState) => {
        if (getState().setting === 'X') {
            dispatch(updateArray())  // contain type 'X'
        }
        if (getState().setting === 'Y') {
        }
    }
    

答案 1 :(得分:-1)

function reducer1(state = {x: true}, action) {
  switch (action.type) {
    case 'SOME_CHANGE':
      return {
        ...state,
        x: action.data.bool,
      }
    default:
      return state;
  }
}
function reducer2(state = {y: [1]}, action) {
  switch (action.type) {
    case 'SOME_CHANGE':
      return {
        ...state,
        y: [...action.data.arrayStuff],
      }
    default:
      return state;
  }
}