我一直在试图解决这个问题,但可能有一些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'
})
})
}));
});
});
});...witch测试此功能:
export function removeAtListOfMembers(state) {
const members = state.get('members');
const removing = state.get('removing');
return state
.deleteIn(['members'], removing)
.remove('removing');
}但不起作用。我什么都试过了..。更改行使其正常工作,但我没有删除第3项。
怎么了?有人来帮我吗?
发布于 2016-06-04 08:56:02
这应该是可行的:
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的(在文献资料中也有提到):记住,当使用JS对象构造不可变的映射时,JavaScript对象属性总是字符串。因此,在将removing传递给deleteIn时,需要将它转换为String。
https://stackoverflow.com/questions/37628154
复制相似问题