编程语言
首页 > 编程语言> > javascript-Immutable.js deleteIn无法正常工作

javascript-Immutable.js deleteIn无法正常工作

作者:互联网

我一直在尝试解决此问题,但是可能有些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’].第二个参数(删除)被忽略,因此结果是整个成员映射都被删除;相反,删除应该成为关键路径的一部分.
>删除是一个数字,但是因为您是从JS对象创建一个Map,所以它的键将是String的键(在the documentation中也有提到):

Keep in mind, when using JS objects to construct Immutable Maps, that JavaScript Object properties are always strings

因此,在将remove传递给deleteIn时,需要将remove转换为String.

标签:reactjs,redux,immutable-js,javascript
来源: https://codeday.me/bug/20191027/1940812.html