【问题标题】:Redux Store is cleared after every action每次操作后清除 Redux Store
【发布时间】:2018-05-09 14:39:22
【问题描述】:

我是 Redux 的初学者,遇到了麻烦。

不知何故,每次操作后,我的整个商店都被完全清除,只执行当前操作。我会用action log的截图来描述一下情况。

这是我的行动:

function writeProduct(id) {
    return {
        type: 'WRITE_PRODUCT',
        id
    }
}

这是我的减速器:

case 'WRITE_PRODUCT':
    console.log("WRITE PRODUCT ACTION: ", action);
    console.log("state: ",state);
    return {
        productID: action.id
    };

这是dispatchwriteProduct 操作期间的控制台日志。

https://cdn1.imggmi.com/uploads/2018/5/9/c4cfc7debab662dfe241889d86254cd1-full.png

我做错了什么?为什么每次 dispatch 之前的 store 都会被覆盖?

【问题讨论】:

  • 你应该返回你的 state 而不是 productID
  • 如果您不使用combineReducers,则需要处理合并属性。
  • 如果您只有一个 ruducer,那么覆盖状态将覆盖存储。
  • 有一个很好的视频系列解释了 redux 的工作原理。 "Redux: The Reducer Function" 是你应该从这个特定问题开始的地方。

标签: javascript react-native redux react-redux


【解决方案1】:

您正在覆盖减速器中的先前状态。 您应该包括所有以前的状态,并且只更改减速器应该的内容。

例如。 在你的减速器中:

return {
    ...state,
    productID: action.id
};

注意...state 部分,其中包括结果中的所有先前状态。

I'd suggest you review the redux docs on immutable updates

另外,您的操作对象不符合 FSA,可能也应该了解这一点。

【讨论】:

  • 谢谢,伙计。我不知道行动后整个商店都被清除了。它解决了我的问题。我当然需要阅读更多关于 Redux 的信息。现在,我将更详细地查看您建议的链接和其他文档。祝你有美好的一天。
【解决方案2】:

嗯,我不知道为什么整个商店都被消灭了,但是

case 'WRITE_PRODUCT':
console.log("WRITE PRODUCT ACTION: ", action);
console.log("state: ",state);
return {
    productID: action.id
};

应该是

case 'WRITE_PRODUCT':
 console.log("WRITE PRODUCT ACTION: ", action);
 console.log("state: ",state);
return {
    ...state,
    productID: action.id
};

``` state 被传递给你的 reducer 函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2016-12-18
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多