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

查看:115
本文介绍了javascript - 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啊

解决方案

如果你使用一个嵌套的数组或对象创建 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})
})

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

这篇关于javascript - React,通过props传递immutable类型数据的疑问,跪求能人解答的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆