React,通过props传递immutable类型数据的疑问,跪求能人解答

render() {
        //通过prop传递给子组件HotelFilterHeader两个 prop, type 和 list
        return (
            <div>
                <HotelFilterHeader type={this.state.data.get('type')} list={this.state.data.get('list')}/>
            </div>
        )
    }

在HotelFilterHeader组件接收到prop后,进行比较。

componentWillReceiveProps(nextProps){
        console.log(Immutable.is(this.props.list, nextProps.list)); // false
        console.log(Immutable.is(this.props, nextProps)); // true
        //为什么一个false一个true啊,按理说list已经false了,props的比较也应该是false啊
    }

为什么一个false一个true啊,按理说list已经false了,props的比较也应该是false啊

阅读 3k
2 个回答

如果你使用一个嵌套的数组或对象创建 Immutable 对象的话,只有最外面一层是 immutable 的,例如:

var a = Immutable.Map({
  list: [1,2,3],
  obj: {a: 1, b: 2}
})

这样创建的对象只有最外层是不可变的,即使用 a.get('list') 获取到的内容仍然只是一个普通数组,并不是不可变数据。

要想让所有内容都是不可变的就得麻烦一点:

var a = Immutable.Map({
  list: Immutable.List([1,2,3]),
  obj: Immutable.Map({a: 1, b: 2})
})

对比下你的使用方法,应该可以找到问题出在哪里了吧

props 并不是Immutable对象?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题