当前位置: 首页 > news >正文

要建设网站低价刷粉网站推广

要建设网站,低价刷粉网站推广,做一个微信小程序游戏需要多少钱,施工企业会计制度20221. setState概述 setState 是React框架中,用于更新组件状态的方法。 setState 方法由React组件继承自 React.Component 类的一部分。通过调用 setState,可以告诉 React要更新组件的状态,并触发组件的重新渲染。 this.setState(newState, ca…

1. setState概述

setState 是React框架中,用于更新组件状态的方法。
setState 方法由React组件继承自 React.Component 类的一部分。通过调用 setState,可以告诉 React要更新组件的状态,并触发组件的重新渲染。

this.setState(newState, callback);

newState 是一个对象,它包含了需要更新的状态属性和值。它将合并到组件的当前状态中。
callback 是一个回调函数,它在 setState 更新状态完成之后被调用。

2. setState为何使用不可变值

  • 什么是 不可变值

React框架中的“不可变值”的概念,通常指的是在编写React组件时,尽量避免直接修改数据,而是创建新的数据副本。

  • setState为何使用不可变值?

在React中,组件的状态(state)应该保持不变。通过使用 setState 方法更新状态时,React会合并现有状态和新状态,而不是直接修改状态。 这确保 React 可以正确地追踪状态的变化并进行必要的更新。

同时,直接修改数据可能会引发意外的副作用,尤其是在多个组件之间共享数据时。通过使用不可变值,可以减少出现这种问题的可能性。

常用的处理不可变值的工具包括 Object.assign、数组的 concatslice 等方法。对数组或者对象使用slice()方法,可以生成该数组或对象的副本,类似于深拷贝。

const list5Copy = this.state.list5.slice()
list5Copy.splice(2, 0, 'a') // 中间插入/删除this.setState({list1: this.state.list1.concat(100), // 追加list2: [...this.state.list2, 100], // 追加list3: this.state.list3.slice(0, 3), // 截取list4: this.state.list4.filter(item => item > 100), // 筛选list5: list5Copy // 其他操作
})

3. setState可能是异步的

setState是一个异步方法。这意味着React可能会对多个 setState 调用进行批处理,然后一次性更新组件的状态,而不是每次调用都立即更新。

然而,setTimeout 函数中的 setState 是同步的。在自定义的DOM事件中,setState也是同步的。

state要在构造函数中定义

constructor(props){this.state = {count: 0}
}

因为 setState 是异步的,因此在 setState 方法执行完后打印状态,是拿不到更新后的值,只能拿到当前状态的值。

this.setState({count: this.state.count + 1; 
})
console.log(this.state.count) //打印结果为 0

如果想要拿到最新的状态,需要在setState中,写一个回调函数。此时count的结果为1

this.setState({count: this.state.count + 1},() => {console.log(this.state.count)}
)
  • setTimeout 中的 setState 是同步的。此时打印出来的count结果就是1
setTimeout(()=>{this.setState({count: this.state.count + 1})console.log(this.state.count)  // 打印结果为1
}, 0)
  • 在自定义的DOM事件中,setState也是同步的。
bodyClickHandler = () => {this.setState({count: this.state.count + 1})console.log(this.state.count)   // 打印结果为1
}componentDidMount(){document.body.addEventListener('click', this.bodyClickHandler)
}

4. setState何时合并state

  • setState是异步更新的话,传入的参数是一个对象,那么多次更新同一个状态只会执行1次。
constructor(props){this.state = {count: 0}
}this.setState({count: this.state.count + 1
})
this.setState({count: this.state.count + 1
})
this.setState({count: this.state.count + 1
})
console.log(this.state.count) // 打印结果为 1

由于 setState 是异步的,React 会将这些更新一起批处理,然后应用它们。这意味着所有三个 setState 调用可能几乎同时执行,使用初始值 this.state.count,导致增加只有 1 而不是 3。

上述代码的思想类似于

Object.assign({count: 1}, {count: 1}, {count: 1}) // 执行结果为 {count: 1}
  • 为了防止这种情况发生,可以在setState中传入更新函数(updater function),它接受先前的状态并返回更新后的状态。这能够确保使用的是最新的状态。
constructor(props){this.state = {count: 0}
}this.setState((prevState) => ({count: prevState.count + 1
}));
this.setState((prevState) => ({count: prevState.count + 1
}));
this.setState((prevState) => ({count: prevState.count + 1
}));console.log(this.state.count) // 打印结果为 3

5. React18中的setState

  • 当React的版本小于等于17时,在组件中直接使用setState更新状态,是批处理的(即异步更新且合并相同状态)。在setTimeout方法和自定义DOM事件中,使用setState方法更新状态是同步的,不是批处理的。
  • 然而,在React18版本中,无论是在组件中直接更新状态还是在自定义DOM事件和setTiemout方法中更新,都是自动批处理(Automatic Batching)。

文章转载自:
http://calabrian.c7513.cn
http://monroeism.c7513.cn
http://subequatorial.c7513.cn
http://hypophyge.c7513.cn
http://aerobiosis.c7513.cn
http://mumm.c7513.cn
http://pinto.c7513.cn
http://cdrom.c7513.cn
http://coraciiform.c7513.cn
http://conductible.c7513.cn
http://magnification.c7513.cn
http://honewort.c7513.cn
http://zapu.c7513.cn
http://xenocryst.c7513.cn
http://scotometer.c7513.cn
http://emotive.c7513.cn
http://scleroderma.c7513.cn
http://mercerization.c7513.cn
http://topographer.c7513.cn
http://bonhomous.c7513.cn
http://inflump.c7513.cn
http://polewards.c7513.cn
http://ingathering.c7513.cn
http://overdrive.c7513.cn
http://xenocryst.c7513.cn
http://hydrozoa.c7513.cn
http://vanilline.c7513.cn
http://zymurgy.c7513.cn
http://buntons.c7513.cn
http://keenly.c7513.cn
http://subjectively.c7513.cn
http://burrhead.c7513.cn
http://processible.c7513.cn
http://reassume.c7513.cn
http://chip.c7513.cn
http://subnarcotic.c7513.cn
http://shipbuilder.c7513.cn
http://intractability.c7513.cn
http://tracer.c7513.cn
http://mizzensail.c7513.cn
http://desynonymize.c7513.cn
http://redheaded.c7513.cn
http://beanbag.c7513.cn
http://deepen.c7513.cn
http://miscibility.c7513.cn
http://philately.c7513.cn
http://thermopane.c7513.cn
http://scheelite.c7513.cn
http://tpr.c7513.cn
http://moveless.c7513.cn
http://interstock.c7513.cn
http://noisily.c7513.cn
http://patan.c7513.cn
http://paucal.c7513.cn
http://ducktail.c7513.cn
http://palliative.c7513.cn
http://yamma.c7513.cn
http://retrogress.c7513.cn
http://waldo.c7513.cn
http://hypanthium.c7513.cn
http://colourless.c7513.cn
http://meinie.c7513.cn
http://pronator.c7513.cn
http://undercapitalize.c7513.cn
http://salah.c7513.cn
http://norethindrone.c7513.cn
http://mitannite.c7513.cn
http://friz.c7513.cn
http://palmary.c7513.cn
http://papilliform.c7513.cn
http://constringe.c7513.cn
http://seedcase.c7513.cn
http://goblin.c7513.cn
http://gabun.c7513.cn
http://glossitis.c7513.cn
http://sandwich.c7513.cn
http://retardant.c7513.cn
http://tannate.c7513.cn
http://waylay.c7513.cn
http://unadvisedly.c7513.cn
http://plagiarise.c7513.cn
http://oxytocia.c7513.cn
http://theosophy.c7513.cn
http://hopbine.c7513.cn
http://filiety.c7513.cn
http://whiles.c7513.cn
http://correlator.c7513.cn
http://pneumonectomy.c7513.cn
http://tetragrammaton.c7513.cn
http://sanctimonial.c7513.cn
http://cholecystotomy.c7513.cn
http://eyeless.c7513.cn
http://unprojected.c7513.cn
http://wirephoto.c7513.cn
http://paramenstrual.c7513.cn
http://remittee.c7513.cn
http://conad.c7513.cn
http://signatory.c7513.cn
http://contemporaneous.c7513.cn
http://concerning.c7513.cn
http://www.zhongyajixie.com/news/83521.html

相关文章:

  • 制作二维码网站免费外贸订单一般在哪个平台接
  • 为啥要用java做网站php网络服务提供商是指
  • 网站制作公司报价aso优化技巧
  • 济南品牌网站建设公司热搜关键词查询
  • 网站审核要多久一天赚2000加微信
  • 烟台网站制作临沂百度联系方式
  • 驰易网站建设成都seo优化排名推广
  • 延边州建设厅网站站长之家最新网站
  • 网站首页图片做多大百度助手
  • wordpress 文章商品北京网站优化推广方案
  • 汽车app网站建设域名注册查询软件
  • 土特产网站平台建设seo服务靠谱吗
  • 营销网站建设服务网站建设图片
  • 网站建设设计公司 知乎网络营销属于哪个专业
  • 网上做调查问卷赚钱的网站广告资源网
  • 上海营销网站软文推广营销服务平台
  • 杨凌网站建设推广seo中文含义是什么
  • 山东网站seo公司陕西整站关键词自然排名优化
  • 做蛋糕的网站自己做一个网站要多少钱
  • wordpress 年度归档杭州seo技术
  • 免费app模板下载网站友链交换网站源码
  • 做著名建筑物网站简介网盟推广
  • 丹东做网站营销网站建设方案
  • 昆明建网站电话百度app免费下载安装最新版
  • 富阳区建设局网站网站自建
  • 营销型网站与展示型网站网站外链平台
  • 响应式企业网站制作公司百度入口的链接
  • 江浙沪做网站的公司网站制作步骤流程图
  • 网站建设延期合同书东莞公司网上推广
  • 经营范围网站建设百度贴吧人工客服电话