Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Immutable JS-getIn()返回未定义的,但可从浏览器在控制台中工作_Reactjs_Reactjs Flux_Immutable.js - Fatal编程技术网

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);