immutablejs 在react中的应用,求指教

给各位码友拜年!
遇到一点一直以来都处理不好的小问题:
state 结构如下
{

name:'aa',
cfg :[
    { text:'b1',value:'1b',selected:[ 1,2,3]},
    { text:'c1', value:'1c',selected:[ 6,7,8]}
]

}

现有函数handleClick,用于同步cfg中的selected数据 :
handleClick( idx ){

//方案1:我平时的做法
let _cfg = deepCopy( this.state.cfg ); //深拷贝一部分
doSomething( _cfg, idx );              //找到修改部分并修改  
this.setState({ cfg : _cfg })

//方案2:参考别人代码
let __cfg = this.state.cfg;            //直接取引用
doSomething( __cfg, idx );             //找到修改部分并修改  
this.setState({ cfg : __cfg })

}

两种方案结果都一样,不知道选哪一种?如果用immutable 怎么优化?
ps:从论坛上看,直接修改state固然不好,但是state在我的项目中并不复杂,觉得方案2也是可以接受的;

ps:亲们,大家不觉得恨蛋疼吗?我只是修改了selected里面的一个成员,但是却要从根部把整个cfg深拷贝出来,不知道码友没有有没有比较好的方案,前提是不用其他js库

阅读 2.7k
2 个回答

不要为了使用什么库而去使用它,你要了解immutable的作用!如果你的state比较简单,你不需要使用immutable这样的库。如果dosomethong也很简单,使用你的第二段代码更好!

你问的和你的示例代码是两个问题。不建议直接修改state,尤其是基于当前state去setState是因为这个操作本身是异步的,也就是this.state有时候并不能指向你想要的状态。

至于immutable的概念其实更多的是伴随函数式的思想引入的,比较明显的好处是提升代码可读性、可测试性、可维护性。

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