在我的减速机中我有这个状态:
const initialState = fromJS({
resources: false,
testval: [0, 0, 0, 0],})
我想在触发操作时追加或删除testval的数组值。我有不可变的,不变的帮助程序导入,但我正在努力使用这种语法来实现这一点。
例如,这不起作用 - 状态不变:
return update(state, {
testval: {
$set: 'test'
}
});
答案 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/