Immutable.js deleteIn无法正常工作 [英] Immutable.js deleteIn not working
本文介绍了Immutable.js deleteIn无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在尝试解决此问题,但是可能有些Immutable.js没有被我发现.我希望有人能帮助我理解.
I have been trying to solve this problem, but there is probably something of Immutable.js that I don't catch. I hope somebody can help me to understand.
我有这样的测试:
import {List, Map} from 'immutable';
import {expect} from 'chai';
import {setInitial,
addAtListOfMembers,
removeAtListOfMembers
} from '../src/core';
describe('removeAtListOfMembers', () => {
it('remove a member to the list of members', () => {
const state = Map({
removing: 3,
infos : Map(),
members: Map({
1:Map({
userName:'René',
date:'12/02/2016'
}),
2:Map({
userName:'Jean',
date:'10/03/2016'
}),
3:Map({
userName:'Elene',
date:'05/01/2016'
})
})
});
const nextState = removeAtListOfMembers(state);
expect(nextState).to.equal(Map({
infos : Map(),
members: Map({
1:Map({
userName:'René',
date:'12/02/2016'
}),
2:Map({
userName:'Jean',
date:'10/03/2016'
})
})
}));
});
});
});
...女巫测试了此功能:
...witch tests this funtion:
export function removeAtListOfMembers(state) {
const members = state.get('members');
const removing = state.get('removing');
return state
.deleteIn(['members'], removing)
.remove('removing');
}
但是它不起作用.我已经尝试了所有方法....更改行使其起作用,但是我没有删除项目编号3.
but it doesn't work. I have tryed everything.... changing the line to make it work, but I don't get the item number 3 deleted.
怎么了?有人帮我吗?
推荐答案
这应该有效:
export function removeAtListOfMembers(state) {
const members = state.get('members');
const removing = state.get('removing');
return state
.deleteIn(['members', String(removing) ])
.remove('removing');
}
您的代码有两个问题:
-
deleteIn
接受单个keyPath
参数,在您的情况下为[ 'members' ]
.第二个参数(removing
)被忽略,因此结果是整个members
映射都被删除;相反,removing
应该成为密钥路径的一部分. -
removing
是Number
,但是由于您是通过JS对象创建的Map
,因此其键将是String
的键(在
deleteIn
takes a singlekeyPath
argument, which in your case is[ 'members' ]
. The second argument (removing
) is ignored, so the result is that the entiremembers
map is deleted; instead,removing
should become part of the key path.removing
is aNumber
, but because you're creating aMap
from a JS object, its keys will beString
's (this is mentioned in the documentation as well):
请记住,当使用JS对象构造不可变地图时,JavaScript对象属性始终是字符串
因此,在将removing
传递到deleteIn
时,需要将其转换为String
.
So you need to convert removing
to a String
when passing it to deleteIn
.
这篇关于Immutable.js deleteIn无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文