我一直在尝试解决这个问题,但是可能有些Immutable.js没有被我捕捉到。我希望有人能帮助我理解。
我有一个像这样的测试:
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'
})
})
}));
});
});
});
...女巫测试此功能:
export function removeAtListOfMembers(state) {
const members = state.get('members');
const removing = state.get('removing');
return state
.deleteIn(['members'], removing)
.remove('removing');
}
但这是行不通的。我已经尝试了所有方法。...更改行使其起作用,但是我没有删除项目编号3。
怎么了?有人帮我吗?
这应该工作:
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
,但是由于您是Map
通过JS对象创建的,因此其键将是String
的(文档中也提到了此键):
请记住,当使用JS对象构造不可变地图时,JavaScript对象属性始终是字符串
因此,您需要在将removing
其String
传递给时将其转换为a deleteIn
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句