访问Redux Reducer中的其他状态部分

本·史密斯

我正在使用Redux,如果用户修改了数据,想在状态中设置一个标志。

首先,我使用来自服务器的一些数据为商店充水:

let serverData = {toggle: true}
const store = configureStore({data: serverData, originalData: serverData})

然后,我有一些减速器:

function data(state = {}, action) {
  switch (action.type) {
    case TOGGLE:
      return {
        ...state,
        toggle: !state.toggle
      }
    default:
      return state
  }
}

function changed(state = false, action) {
  // This doesn't work; we are actually comparing state.changed.originalData and state.changed.data
  return isEqual(state.originalData, state.data)
}

const rootReducer = combineReducers({
  data,
  originalData: (state={}) => state,
  changed
})

我想在这里做的就是将changed标志设置为true,如果state.data不再等于state.originalData但是,使用CombineReducers,我无法访问我的changedreducer内部状态的这些部分

什么是最惯用的方法?

多米尼克

Michelle是正确的,以传统的通量术语扩展它是将reducer视为商店,您只是将其中一个商店称为“数据”而另一个称为“已更改”-这不是语义,这表明您可能对它们的含义感到困惑用过的。

changed减速应该要么返回未修改的状态,或者,如果是做一个动作,它的兴趣,返回下一个状态。这不是为了弄清楚您的商店是否发生了变化,这subscribe就是要这样做的。

const unsubscribe = store.subscribe(() =>
  console.log('store was changed:', store.getState())
)

当您调用combineReducers时,它会以-的动作调用每个reducer一次,@@redux/INIT但是不要担心,因为它是内部的。要了解的重要一点是,在每个reducer键下,状态都已初始化。在您的情况下,您将初始化data为一个空对象,changedfalse和originalData一个空对象。

接下来,当您打来电话时,createStore您说“使用服务器的初始状态更新'数据'和'原始数据'存储”。因此,现在“数据”和“ serverData”存储的状态等于{toggle: true}

此时,两个对象是相同的。

随后,当您调用store.dispatch所有的reducer时,它们将有机会修改每个reducer键下的状态(并返回一个新对象)每个reducer只能访问自己的状态。因此,在changed减速器中,您无法像这样检查整个状态的整体对象相等性。

但是,您可以在订阅中检查对象是否相等(对于Chrome 47,此处为混合ES5 / 6)

'use strict';

const serverData = {toggle: true};
const TOGGLE = 'TOGGLE';

function data(state, action) {
    state = state || {};
  switch (action.type) {
    case TOGGLE:
        return Object.assign({}, state, {
        toggle: !state.toggle
      })
    default:
      return state
  }
}

function originalData(state) {
    state = state || {};
  return state;
}

const rootReducer = Redux.combineReducers({
  data,
  originalData
});

const store = Redux.createStore(rootReducer, {data: serverData, originalData: serverData });

const unsubscribe = store.subscribe(() =>
  console.log('on change equal?', store.getState().data === store.getState().originalData)
)

console.log('on load equal?', store.getState().data === store.getState().originalData);

store.dispatch({ type: TOGGLE });

console.log输出应为:

on load equal? true
on change equal? false

小提琴:https : //jsfiddle.net/ferahl/5nwfqo9k/1/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问ngrx中的reducer中的其他状态部分

来自分类Dev

Redux; 通过CombineReducers使用组合化的reducer时访问状态的其他部分

来自分类Dev

Redux:根据操作在Reducer中更改初始状态的不同部分

来自分类Dev

反应redux以全局访问状态

来自分类Dev

Redux 从动作访问状态

来自分类Dev

在Tabnavigator中访问Redux状态(反应导航)

来自分类Dev

无法访问组件中的 redux 状态

来自分类Dev

如何响应Redux中的状态更改并调度其他操作?

来自分类Dev

如何响应Redux中的状态更改并调度其他操作?

来自分类Dev

Redux状态被其他状态更改覆盖

来自分类Dev

从Dart中的其他Web组件访问状态

来自分类Dev

如何访问reducer(redux-router)中的当前位置?

来自分类常见问题

在Redux Reducer中读取商店的初始状态

来自分类Dev

在Redux Reducer中更新状态的正确方法

来自分类Dev

Redux Reducer无法更新存储中的状态

来自分类Dev

在 redux reducer 中更新状态的问题

来自分类Dev

无法在 redux 中更新 reducer 状态

来自分类Dev

在Redux Reducer中扩展或克隆File Web API对象以支持其他属性

来自分类Dev

将任何操作发送到 redux 它会清除状态的其他部分

来自分类Dev

Redux形式的handleSubmit:如何访问存储状态?

来自分类Dev

通过Redux操作访问组件状态

来自分类Dev

如何通过redux-thunk中的fetching操作访问状态?

来自分类Dev

在React组件的功能中访问新的REDUX状态

来自分类Dev

在 NextJS getInitialProps 中调用 dispatch 时访问 redux 状态

来自分类Dev

在常量文件中访问Redux存储

来自分类Dev

在Redux存储中存储访问令牌或密钥

来自分类Dev

React:从组件中的Redux访问数据

来自分类Dev

我如何在React Redux中访问另一个Reducer的状态。减速器和存储之间的状态流

来自分类Dev

如何通过参数调用redux动作并从reducer进行访问?

Related 相关文章

  1. 1

    访问ngrx中的reducer中的其他状态部分

  2. 2

    Redux; 通过CombineReducers使用组合化的reducer时访问状态的其他部分

  3. 3

    Redux:根据操作在Reducer中更改初始状态的不同部分

  4. 4

    反应redux以全局访问状态

  5. 5

    Redux 从动作访问状态

  6. 6

    在Tabnavigator中访问Redux状态(反应导航)

  7. 7

    无法访问组件中的 redux 状态

  8. 8

    如何响应Redux中的状态更改并调度其他操作?

  9. 9

    如何响应Redux中的状态更改并调度其他操作?

  10. 10

    Redux状态被其他状态更改覆盖

  11. 11

    从Dart中的其他Web组件访问状态

  12. 12

    如何访问reducer(redux-router)中的当前位置?

  13. 13

    在Redux Reducer中读取商店的初始状态

  14. 14

    在Redux Reducer中更新状态的正确方法

  15. 15

    Redux Reducer无法更新存储中的状态

  16. 16

    在 redux reducer 中更新状态的问题

  17. 17

    无法在 redux 中更新 reducer 状态

  18. 18

    在Redux Reducer中扩展或克隆File Web API对象以支持其他属性

  19. 19

    将任何操作发送到 redux 它会清除状态的其他部分

  20. 20

    Redux形式的handleSubmit:如何访问存储状态?

  21. 21

    通过Redux操作访问组件状态

  22. 22

    如何通过redux-thunk中的fetching操作访问状态?

  23. 23

    在React组件的功能中访问新的REDUX状态

  24. 24

    在 NextJS getInitialProps 中调用 dispatch 时访问 redux 状态

  25. 25

    在常量文件中访问Redux存储

  26. 26

    在Redux存储中存储访问令牌或密钥

  27. 27

    React:从组件中的Redux访问数据

  28. 28

    我如何在React Redux中访问另一个Reducer的状态。减速器和存储之间的状态流

  29. 29

    如何通过参数调用redux动作并从reducer进行访问?

热门标签

归档