如何使用react / redux更新状态对象中的数组

时间:2016-11-07 17:33:43

标签: reactjs redux

在我的减速机中我有这个状态:

const initialState = fromJS({
 resources: false,
 testval: [0, 0, 0, 0],})

我想在触发操作时追加或删除testval的数组值。我有不可变的,不变的帮助程序导入,但我正在努力使用这种语法来实现这一点。

例如,这不起作用 - 状态不变:

return update(state, {
        testval: {
            $set: 'test'
        }
    });

3 个答案:

答案 0 :(得分:2)

看起来你可能正在混合使用两种不同的工具集。 Immutable.js是一组专门的数据结构,而Immutability-Helper库希望能够处理普通的JS对象。

您可能需要阅读Redux文档的Immutable Update Patterns部分,该部分讨论了在普通JS数据上正确执行不可变更新的方法,以及Prerequisite Concepts文档页面中的相关链接。

答案 1 :(得分:0)

好的我用Immutable想出来了。

添加到数组:

#ifndef __Processes_H_
#define __Processes_H_
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

void    ChildProcess();
void    ParentProcess();
int CreateShmSegment(key_t, size_t, int);
void*   AttachShmSegment(int);
int DetachShmSegment(const void*);
int     DeallocateShmSegment(int);

#endif

从数组中删除:

#include "process.h"

void ChildProcess()
{

}


/***************************************************************/

void ParentProcess()
{

}

/****************************************************************/

int CreateShmSegment(key_t key, size_t size, int flag)
{
    int id;
    id = shmget(key, size, flag);
    return id;
}

/*****************************************************************/

void* AttachShmSegment(int id)
{
    char* data = NULL;
    data = (char*) shmat(id, NULL, 0);
    return data;
}

/*****************************************************************/

int DetachShmSegment(const void* addr)
{
    return shmdt(addr);
}

/*****************************************************************/

int DeallocateShmSegment(int id)
{
    return shmctl(id, IPC_RMID, NULL);
}

答案 2 :(得分:0)

因为你错误地更新了它,

第一件事是您的数组将被转换为List对象,因此需要以列表样式进行更新。

在下面的示例1中是我正在更新的索引,您可以为此使用任何动态变量,item也是该索引处的当前值。如果那是对象(在某些其他用例中),您可以修改对象并将其返回。

const initialState =  Immutable.fromJS({
 resources: false,
 testval: [0, 0, 0, 0]});

//replace initial state with state, i just posted example code

initialState = initialState.set("testval",initialState.get("testval").update(1,(item)=>{
return 2;
}));
 console.log(initialState.get("testval"))

有关更详细的示例,您还可以查看此帖子https://onl9class.com/using-immutable-js/