我有一个immutable.js地图。例如:
//默认,当用户第一次登录页面时
var myObject = Immutable.Map({
productID: '',
colors: ['brown', 'red'],
sku: ''
sizes: [10]
})
现在,根据他们如何访问我的应用程序 - 我使用不同的数据填充“myObject”上方。
所以,例如:让我们说它们来自pathA // pathA传递一些数据......给myObject加水合
var myObject = Immutable.Map({
productID: '090ABl',
colors: ['brown', 'red', 'yellow'],
sku: '__whatever'
sizes: [10, 18, 9]
})
所以,例如:让我们说它们来自pathB
**这是问题的来源。我之前有myObject的“状态”。我需要“清除并回到初始状态”。我正在使用redux。
// pathB传入一些数据......给myObject加水合
var myObject = Immutable.Map({
productID: '090XZLG',
colors: ['red', 'yellow'],
sku: '__food'
sizes: [9]
})
数据正在梳理等等。我需要它“清除”。好奇,如果有一个Immutable.js方法,它允许用新的方法刷新myObject,这与初始状态相同。我是immutable.js的新手,所以我有点好奇为什么它很难做简单的事情: - )
答案 0 :(得分:0)
immutable.js对象不知道'它的默认值是什么'是的,所以没有办法重置它。如果您的应用程序中有一个默认对象,请在变量中保留对它的引用,就像它是一个普通的JavaScript对象一样:
var defaultObject = Immutable.Map({
productID: '',
colors: ['brown', 'red'],
sku: ''
sizes: [10]
})
然后,当用户到达某个路径时,您只需进行修改并将其保存在不同的变量中:
var myObject = defaultObject.set(...);
答案 1 :(得分:0)
在redux中为状态对象使用不可变对象时,在我的许多化简器中,我set
都使用某个键来表示初始状态下的get
。
即:
function reeducer(state = initialState, action) {
switch (action.type) {
...
case CLEAR_SELECTION:
return state.set('selected', initialState.get('selected'));
...
}
}
当然,为了使其更简洁(特别是避免重复字符串),可以为此创建一个函数:
function resetKey(state, initialState, key) {
return state.set(key, initialState.get(key));
}
(或者也可以称为copyKey或copySection) 也可以是resetPath / copyPath
function resetPath(state, initialState, path) {
return state.setIn(key, initialState.getIn(path));
}