- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
使用react在修改state中的数组和对象数据的时候(setState)
目录react修改state的数组和对象数据的时候(setState)需要注意react修改数组对象的注意事项删除数组中的指定元素合并两个对象修改多层级对象的值
react修改state的数组和对象数据的时候(setState)
首先在修改状态数据(state)的时候,我们要遵循react的规则,使用setState()方法去修改
此时修改的数据是一个数组或者是一个对象的时候,setState中传递一个对象是不能够满足的,此时就需要给setState中传递函数了!
此时函数中的参数state就是我们组件中的state数据,可以在方法中把参数中state改变后通过k:vreturn出来
handlerWorkType(item,index){
this.setState((state)={
for(leti=0;istate.submitWorksList.length;i++){
if(state.submitWorksList[i]==item.id){
state.submitWorksList.splice(i,1)
state.worksTypeList[index].activeShow=false
return{
submitWorksList:state.submitWorksList,
worksTypeList:state.worksTypeList
state.submitWorksList.push(item.id)
state.worksTypeList[index].activeShow=true
return{
submitWorksList:state.submitWorksList,
worksTypeList:state.worksTypeList
}
需要注意
必须要在数据修改之后在通过k:v对return;
避免调用其它方法,将其它方法的返回值赋值给我们的变量;得不偿失!
react修改数组对象的注意事项
react开发主张使用函数式编程,函数式编程有个重要的特性就是不可变性。你无法更改数据,也不能更改。如果要改变或更改数据,则必须复制数据副本来更改。
看个例子,就是Vue和React两个框架实现给数组添加一个元素。
vue
exportdefault{
???name:home,
???data(){
??????return{
?????????testArr:[苹果,香蕉]
??????};
??},
??created(){
????this.testArr.push(橘子)
??}
...
react
classAppextendsReact.Component{
??constructor(props){
????super(props);
????this.state={
??????testArr:[苹果,香蕉]
????};
??}
??componentDidMount(){
????this.setState({
??????testArr:[...this.state.testArr,橘子]
????})
??}
??render(){
????return(
??????React.Fragment
????????p{this.state.testArr}/p
??????/React.Fragment
????)
??}
}
这里会发现两个框架有个细微差别,Vue是直接修改的原数组,而React是不修改原数组,而是创建了一份新的数组,再通过setState赋值。刚接触React的时候的确会觉得挺奇怪,感觉会无形增加代码复杂度。接下来看下为何React要如此设计。
React遵循函数式编程规范。在函数式编程中,不推荐直接修改原始数据。如果要改变或更改数据,则必须复制数据副本来更改。所以,函数式编程中总是生成原始数据的转换副本,而不是直接更改原始数据。
这里是一些常见的React修改数组或者对象的例子,所有这些函数都不改变现有的数据,而是返回新的数组或对象。
删除数组中的指定元素
//删除testA
文档评论(0)