为什么不使用Object.assign的reducer更新状态?

时间:2019-02-06 19:55:59

标签: javascript redux state redux-actions

我试图创建一个没有ES6好处的减速器。这是一个旧的PHP应用程序,没有构建过程可用于转换。

我正在初始化状态:

let defaultState =  {
    accountTypes: {
        personal: {
            selected: false,
            checking: {
                selected: false
            },
            savings: {
                selected: false
            }
        },
        business: {
            selected: false,
            checking: {
                selected: false
            },
            savings: {
                selected: false
            }
        }
    }
};

这里是减速器,然后是商店初始化:

function reducer(state, action) {
  switch (action.type) {
    case 'TOGGLE_ACCOUNT_TYPE':
      console.log(state.accountTypes);
      // {
      //   business: {selected: false, checking: {…}, savings: {…}}
      //   personal: {selected: true}
      // }

      console.log(action.payload);
      // {
      //   personal: {selected: true}
      // }

      let blah = Object.assign({}, state, {
        accountTypes: Object.assign({}, state.accountTypes, action.payload)
      });

      console.log(blah.accountTypes);
      // {
      //   business: {selected: false, checking: {…}, savings: {…}}
      //   personal: {selected: true}
      // }

      return blah;

    default:
      return state;
  }
}

const store = Redux.createStore(reducer, defaultState);
let state = store.getState();

稍后在jQuery的document.ready中订阅状态:

store.subscribe(function () {
    console.log(state.accountTypes);
    // {
    //    business: {selected: false, checking: {…}, savings: {…}}
    //    personal: {selected: false, checking: {…}, savings: {…}}
    // }

您可以看到状态未使用操作有效负载更新。

1 个答案:

答案 0 :(得分:2)

我想我只是偶然发现了答案。发布问题使松散的东西感到震惊。我在jQuery操作中使用了过时的状态变量。

store.subscribe(function () {
    // update the state var
    state = store.getState();

如果有一种更好的方法来使用状态变量而不必手动刷新它,请发布另一个答案。