-
尽量不要直接修改state中的数据,如:
this.state.list.splice(xxx) this.setState({ list:this.state.list })
这样做确实可以生效,但应该遵循immutable的原则而尽量避免直接修改state中的数据,所以改为:
const list = [...this.state.list] list.splice(xxx) this.setState({ list })
-
this.setState可以返回一个函数,也推荐大家尽量使用函数式setstate,如:
handleInputChange(e){ const value = e.target.value this.setState(()=>({ inputValue: value })) }
这里注意,我们不能直接inputValue:e.target.value,而要先做一份拷贝,再使用,否则会由于
异步的问题报错。tips: 函数体用()括住,表示函数体是一个直接return的对象,等同于:
this.setState(()=>{ return { inputValue: value } })
此外,函数式setState的函数还可以接受两个参数
this.setState((prevState, props) => ({ counter: prevState.counter + props.increment }))
第一个参数是原始state,等同于this.state,第二个参数是父组件传递的属性。
再此外,setState本身还可以接收第二个参数,解决由于setState是异步的,有些事件我们需
要等setState更新完才触发,所以第二个参数是一个回调函数,如:this.setState(()=>{ return { inputValue: value } }, ()=>{ console.log("this is a callback") })
而且,回调函数会在componentDidUpdate之后执行。
React父子组件通信遵循单向数据流,因此子组件拿到父组件传递的props是只读的,不要尝试去修改它哦。
setState是一个异步方法,可以集中执行多数据的更新,从而减少虚拟DOM比对次数,提升性能。
setState的一些注意事项
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本笔记基于React官方文档,当前React版本号为15.4.0。 1. 安装 1.1 尝试 开始之前可以先去co...