Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Immutable.js deleteIn不工作_Javascript_Reactjs_Redux_Immutable.js - Fatal编程技术网

Javascript Immutable.js deleteIn不工作

Javascript Immutable.js deleteIn不工作,javascript,reactjs,redux,immutable.js,Javascript,Reactjs,Redux,Immutable.js,我一直在试图解决这个问题,但可能有一些Immutable.js我没有理解。我希望有人能帮助我理解 我有一个这样的测试: import {List, Map} from 'immutable'; import {expect} from 'chai'; import {setInitial, addAtListOfMembers, removeAtListOfMembers } from '../src/core'; describ

我一直在试图解决这个问题,但可能有一些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对象创建一个
    映射
    ,所以它的键将是
    字符串
    (这也在中提到): 请记住,当使用JS对象构建不可变映射时,JavaScript对象属性总是字符串

因此,在将
删除
传递给
deleteIn
时,需要将其转换为
字符串