国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入掌握 react的 setState的工作機制

2024-05-06 15:26:10
字體:
來源:轉載
供稿:網友

react 是單向數據流,若想要改變已有組件的外觀,我們只能通過更改組件的 props 或者更新組件的 state。在 react 項目的代碼中我們操作最多的就是 this.setState 方法。下面對 setState 方法進行詳細的說明。

<!--more -->

setState要點:react 框架為了提高性能,會對 state 的更新進行收集、合并、再進行一次批量的狀態更新。這種機制常常導致一些意想不到的情況。

setState 有兩種調用形式:

向 setState 傳遞對象
setState()并不會立即觸發 state 的更新。

//this.state.demo = 1;handleClick = () => {  this.setState({demo: 2});  console.log(this.state.demo);// 1}

1、🔔注意:在 addEventListener、setTimeout、ajax 回調中 this.setState 是立即觸發的。

2、setState 會合并更新,可能會造成狀態更新的丟失

handleClick = () => {  this.setState({demo: this.state.demo + 1});  this.setState({demo: this.state.demo + 1});}//click 之后 demo 為2而不是3

綜上:在同一代碼塊中不要多次調用 this.setState 方法

react 的 setState 還提供了另一種調用形式: this.setState(callbackFunc)

this.setState((previousState, currentProps) => {  return { ...previousState, foo: currentProps.bar };});

該語法和直接為 setState 傳遞對象不同,不會合并更新。

// demo + 1handleSyncStateChange = () => {  this.setState({    demo: this.state.demo + 1  });  this.setState({    demo: this.state.demo + 1  });}// demo + 2handleAsyncStateChange = () => {  this.setState((preState, preProps) => {    return {      demo: preState.demo + 1    }  });  this.setState((preState, preProps) => {    return {      demo: preState.demo + 1    }  });}

refs

Async Nature Of setState

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 寿光市| 鄂尔多斯市| 萨迦县| 得荣县| 宾阳县| 信宜市| 喀什市| 泾源县| 习水县| 尤溪县| 佳木斯市| 临夏县| 潢川县| 台东市| 常德市| 武邑县| 招远市| 封开县| 屏山县| 罗甸县| 宜宾县| 蒲江县| 卢氏县| 铁力市| 常熟市| 通城县| 元谋县| 佳木斯市| 普兰店市| 山丹县| 商河县| 利津县| 纳雍县| 元江| 永城市| 栖霞市| 凤阳县| 兴城市| 方山县| 平谷区| 会东县|