【问题标题】:redux with immtuable js带有不可变 js 的 redux
【发布时间】:2018-01-16 20:06:00
【问题描述】:

我正在尝试将 redux 与不可变 js 一起使用。 我做了两个减速器(布局,任务),它工作正常。

layout.js

const initialState = Map({
  width: Dimensions.get('window').width,
  height: Dimensions.get('window').height,
});
export default function layout(state = initialState,action){
  // Some Tasks
}

task.js

const initialState = Map({
  list: Map({
    tasks: List([]),
    status: 'INIT',
  })
});

export default function task(state = initialState,action){
 // Some Tasks
}

我的问题是当我尝试通过 mapStateToProps 获取状态时

const mapStateToProps = (state) => {
  return {
    task: state.get('task')
  }
}

它给了我一个错误'state.get 不是一个函数'。 当我把它改成

task: state.task

效果很好。

我的想法是因为 combineReducers 不会产生不可变状态。 有什么解决办法吗?还是使用task: state.task 是正确的方式?

【问题讨论】:

  • 确保您使用的是来自redux-immutablecombineReducers 。此外,您可能正在对可变对象进行一些操作来刷新 redux 存储。

标签: reactjs redux immutable.js


【解决方案1】:

您必须使用redux-immutable 库才能使您的商店也成为不可变对象。默认情况下它会返回一个object。 还有更多详情here

createStoreinitialState 调用时,它是Immutable.Collection 的一个实例,进一步调用reducer 将产生错误:

“传递给 createStore 的 initialState 参数具有意外类型的“对象”。预期参数是具有以下键的对象:“数据””

这是因为 Redux combineReducers 将状态对象视为纯 JavaScript 对象。

使用 redux-immutable 创建的combineReducers 使用 Immutable.js API 来迭代状态。

.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2018-07-22
    相关资源
    最近更新 更多