首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Immutable.js deleteIn不工作

Immutable.js deleteIn不工作
EN

Stack Overflow用户
提问于 2016-06-04 08:34:18
回答 1查看 4.2K关注 0票数 4

我一直在试图解决这个问题,但可能有一些Immutable.js我不明白。我希望有人能帮我理解。

我有个这样的测试:

代码语言:javascript
复制
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测试此功能:

代码语言:javascript
复制
export function removeAtListOfMembers(state) {
  const members = state.get('members');

  const removing = state.get('removing');

  return state
        .deleteIn(['members'], removing)
        .remove('removing');
}

但不起作用。我什么都试过了..。更改行使其正常工作,但我没有删除第3项。

怎么了?有人来帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-04 08:56:02

这应该是可行的:

代码语言:javascript
复制
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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37628154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档