javascript - 在 Redux 中清除数组状态

标签 javascript reactjs react-native redux react-redux

如何在 Redux 中清除数组状态?我有一个空数组的初始状态,正在添加内容。我想要一个清除它的 Action ,我尝试了以下方法,但它给了我关于我给 CLEAR_THINGS Action 的“action.payload”的“意外 token ”错误:

export default (state=[], action) => {
switch (action.type) {
    case "RECEIVE_THING":
        return [
            ...state,
            action.payload
        ];
    case "CLEAR_THINGS":
        return {
            ...state,
            action.payload // payload here is []...
        };
    default:
        return state;
}}

如果我只是使用 [] 而不是通过 action.payload,它也会抛出错误。

最佳答案

export default (state=[], action) => {
switch (action.type) {
    case "RECEIVE_THING":
        return [
            ...state,
            action.payload
        ];
    case "CLEAR_THINGS":
        return [];
    default:
        return state;
}}

RECEIVE_THING 操作使用对象扩展符号返回一个状态,该状态是一个数组 ([]),其中包含先前的状态 ([...state ]) 并向其添加一个新项目 ([...state, action.payload])。用于此新项目的键/属性名称只是数组的下一个索引。毕竟,它是一个数组。

在您的 CLEAR_THINGS 代码中,您正在创建一个对象 ({}),其中包含旧状态(比如说它是 ['item1']) 所以它看起来像 { '0': 'item1' }。接下来您继续使用 object shorthand notation添加更多状态,但这需要您使用单个标识符(单个词),但您使用的是点分概念(限定标识符)来访问属性。您是在指示创建一个名为 action.payload 的属性,但这是非法的,这就是您的错误来源。它在数组的情况下起作用的原因是因为在这种情况下只需要一个值,因为键是从数组的索引派生的。

你想要做的是始终返回相同类型的对象,在你的例子中,是一个数组。从 return { 开始,您已经走错了路。

关于javascript - 在 Redux 中清除数组状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39456184/

相关文章:

javascript - 异步ajax请求锁定浏览器

javascript - JavaScript 中的 Python any() 和 all() 函数等价于什么?

javascript - Tesseract.js 与 React : Tainted canvases may not be exported

javascript - 在 React 中绑定(bind)到 this 的性能最高?

reactjs - 使用 Date-FNS 转换日期字符串

javascript - 如何在 React Native 中垂直居中项目

与 Expo : undefined is not an object (evaluating 'CameraManager.Aspect' ) react 原生相机错误

javascript - Cordova UWP 桌面 - 隐藏后退箭头

javascript - 当应用程序在后台运行时,响应 native 电源按钮长按监听器

javascript - 将动态字符串传递给对象