以下是我的代码中的代码段:
this.state = {
data: Immutable.Map({
gender: "",
provinces: Immutable.Map(),
activeProvince: this.props.defaultProvince,
activeCity: this.props.defaultCity,
})
}
let cities = this.state.data.getIn(['provinces', '354']);
The structure would look like this:
state{
gender: "",
activeProvince: "354",
provinces: {
354: {
name: "abc",
cities: Immutable.Map()
},
123: {
name: "def",
cities: Immutable.Map()
}
}
获得省份'只返回一个大小为87的Map,这意味着它有值,但是更深一级会给我一个未定义的。从浏览器在控制台中完成它可以得到预期的结果。
我是在"返回"
之前的render()中完成的render(){
let provinces = this.state.data.get('provinces')
.sortBy( province => province.get('name') )
.map( (value, key) => {
return { text: value.get('name'), value: key }
});
// Supposed to do the same thing as above (provinces)
// with ['provinces'] only it returns a value, adding '354' returns undefined.
let cities = this.state.data.getIn(['provinces', '354']);
console.log(cities);
- 编辑 -
通过执行' toObject()'将省份地图转换为对象显示密钥存在,为什么getIn(' provinces,' 354')显示未定义?
答案 0 :(得分:1)
当我尝试重现您的问题时,我注意到provinces
键及其一级子项是不可变的,但name
和cities
键实际上是可变的。这就是为什么我在包含sortBy
函数的行上出错了。要解决此问题,您需要使用provinces
而不是Immutable.fromJS()
定义Immutable.Map()
。 Immutable.Map()
仅将对象转换为一个级别的不可变对象。但是,Immutable.fromJS()
会将所有级别转换为不可变级别。