react使用immutable数据结构,setState里的preState 不是Map 结构的?

  constructor(props) {
    super(props);
    this.state = fromJS({
      person: {
        name: 'xuxuan',
        age: 12
      }
    })
    console.log('**********初始state')
    console.log(this.state)
    console.log('**********初始state')
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick(e) {console.log(this.state)
    this.setState(preState => {
      console.log('**********click...state')
      console.log(preState);
      console.log('**********click...state')
      return preState.update(['person', 'name'], v => v + 'update')

    })
  }

初始设置state 为immutable 结构,处理click时候,setState传入function的preState不是Map机构

报错:preSate没有update 方法。

这种方式setState如何操作immutable数据??

阅读 6.3k
2 个回答

你这种用法是错误的。
正确用法

this.state = {
    person: fromJS({
        name: 'xuxuan',
        age: 12
    })
}

this.setState({
    person: this.state.person.update('name', v => v + 'update')
})

不建议你在State中使用ImmutableJS。一般用在Reducer层。

因为 state 本身必须是 plain object,但是里面的值可以是 immutable 的数据。(见 @陈小亮Chan 的答案)

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