【发布时间】:2016-01-25 11:45:49
【问题描述】:
我有一个在Immutable.js 记录上运行的reducer 函数,一个Calendar:
const Calendar = new Record({
'events': new List(), // list of Events
});
这是Events的列表:
const Event = new Record({
'start': null,
'end': null,
'title': null,
});
我想将来自 Javascript 对象的新事件添加到此列表并返回一个新的 Calendar 记录,但前提是对象不在列表中:
(state = new Calendar)=> {
const receivedEvent = new Event({
start: <a date>,
end: <another date>,
title: <a string>,
});
let newState;
if (state.get('events').contains(receivedEvent)){
newState = state;
} else {
newState = state
.updateIn(['events'], (events)=> events.push(receivedEvent));
}
return newState;
}
这是我现在凌晨 4 点能做的最好的事情,但这似乎是一种糟糕的方法。
有没有办法更好地利用 Immutable 提供的功能范式来完成同样的任务?
【问题讨论】:
-
乍一看,您似乎有一个
Set的事件。如果您更改数据类型,那么提出includes(或contains)之类的问题会变得更容易。 -
在你的reducer中,你可以使用github.com/engineforce/ImmutableAssign,它是一个轻量级的不可变助手,允许你继续使用POJO(Plain Old JavaScript Object)。
标签: javascript ecmascript-6 immutable.js