为什么我不能链接state.get('something')。filter with immutable.js?

时间:2016-05-24 21:58:33

标签: javascript redux immutable.js

我做错了什么?

我想使用get('..')filter过滤内的步骤键,但我无法做到。< / p>

我有这个功能:

function visibleSteps(state) {
  return state.get('steps').filter((step) => {
    return step.display
  })
}

使用此示例进行测试时:

describe('visibleSteps', () => {
  it('should show the steps with display true and their title', () => {
     const state = Map({
        steps: {
            0: {
                display: false
            },
            1: {
                display: true,
                title: "A title"
            },
            2: {
                display: true,
            },
            3: {
               display: false,
            }
        }
    })

    expect(visibleSteps(state).size).to.equal(2)
  })
})

我收到此错误:

TypeError: state.get(...).filter is not a function

男人怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

您收到此错误,因为steps的值是普通对象。对象没有.filter方法。如果您希望该值为Map,则可以明确创建它:

const state = Map({
  steps: Map({
    // ...
  })
});

同样适用于大多数内部物体。如果希望嵌套的JS对象/数组被深度转换为不可变MapList,则可以使用immutable.fromJS