Reactjs Immutable JS-getIn()返回未定义的,但可从浏览器在控制台中工作
以下是我的代码片段:Reactjs Immutable JS-getIn()返回未定义的,但可从浏览器在控制台中工作,reactjs,reactjs-flux,immutable.js,Reactjs,Reactjs Flux,Immutable.js,以下是我的代码片段: this.state = { data: Immutable.Map({ gender: "", provinces: Immutable.Map(), activeProvince: this.props.defaultProvince, activeCity: this.props.defaultCity, }) } let cities = this.state.dat
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的地图,这意味着它有值,但更深一层会给我一个未定义的值。从浏览器在控制台中执行此操作可以得到预期的结果
我在“return”之前的render()中执行此操作
--编辑--
通过执行“toObject()”将省映射转换为对象显示键存在,那么为什么getIn(“省,'354')显示未定义?当我试图重现您的问题时,我注意到
省
键及其一级子项是不可变的,但是名称
和城市
键实际上是可变的。这就是为什么,我在包含sortBy
函数的行中遇到错误。要解决这个问题,您需要使用不可变的.fromJS()
而不是不可变的.Map()
来定义省份Immutable.Map()
仅将一个级别的对象转换为不可变。但是,Immutable.fromJS()
,将所有级别转换为不可变 它实际上是不可变的。我只是展示了它的样子。现在开始工作了。我有一个错误,导致渲染停止,因为初始省状态为空。
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);