最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React生命周期方法之componentDidMount的使用

 更新時(shí)間:2023年06月06日 14:26:47   作者:star_zone  
這篇文章主要介紹了React生命周期方法之componentDidMount的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

React生命周期方法componentDidMount

1. componentDidMount() 這個(gè)生命周期方法應(yīng)該是用的最多的,一般用在進(jìn)入頁面后,數(shù)據(jù)初始化,這種情況下,跟model中的 subscription方法作用是一樣的。

但是當(dāng)你數(shù)據(jù)初始化方法都寫在subscription方法時(shí),當(dāng)你改了頁面訪問路徑,model里面的path沒改過來,初始化方法就調(diào)不到了。

但是要是把數(shù)據(jù)初始化接口都放在componentDidMount函數(shù)里,只要進(jìn)入頁面就會(huì)去執(zhí)行。

2.當(dāng)你有種情況:一個(gè)父頁面,一個(gè)編輯或新增(編輯新增通常為同一個(gè)頁面)頁被父頁面引用:

{
  editVisible ? <PartDesignEdit form={form} editVisible={editVisible} editValue={editValue} designList={designList} colseEdit={this.colseEdit} setLoading={this.setLoading} /> : null
}
{/* <PartDesignEdit form={form} editVisible={editVisible} editValue={editValue} designList={designList} colseEdit={this.colseEdit} setLoading={this.setLoading} /> */}

上圖是在父頁面引用編輯頁,編輯頁是個(gè)Modal,通過editVisible控制,1  和  2 這兩種方式看起來是一樣的

但是當(dāng)有時(shí)候你可能碰到這樣的情況:

1.就是在編輯頁面,你修改完數(shù)據(jù)后,關(guān)掉編輯頁,第二次打開后,發(fā)現(xiàn)還是上次修改后的內(nèi)容。

2.或者,本來新增頁面某些輸入框的值是有初始值的,被編輯一次之后再進(jìn)去,初始值變上次修改后的值

這時(shí)就有區(qū)別了。

下圖是每次進(jìn)入到編輯頁面,就重置初始值(根據(jù)自己業(yè)務(wù)):

我們想,只要在每次進(jìn)入到編輯頁的時(shí)候,去重置頁面的數(shù)據(jù)不就好了,所以可以通過在編輯/新增頁面的componentDidMount方法中,去每次的設(shè)置頁面的初始值。

但是,當(dāng)你用圖1的 2方式,你會(huì)發(fā)現(xiàn),編輯頁面只有第一次加載時(shí)會(huì)被執(zhí)行,后面再進(jìn)去,還是出現(xiàn)值重置不了的問題。

但是,截圖一種的方式1就不一樣了,編輯頁打開(editVisible=true)時(shí)編輯頁才被引用,editVisible=false時(shí),不被引用,所以,每次editVisible=true時(shí),相當(dāng)于編輯頁每次都是第一次加載,所以componentDidMount方法中的方法每次都會(huì)被執(zhí)行,這樣問題就解決了。

這個(gè)可以用在其他相似的情形。

React生命周期(getDerivedStateFromProps,componentDidMount)

之前的開發(fā)過程中沒有遇到太多復(fù)雜的功能,所以就沒有使用到react的生命周期。最近在mars3d React基礎(chǔ)項(xiàng)目開發(fā)中涉及了,生命周期的使用。

componentDidMount

先看一下官方解釋

https://zh-hans.reactjs.org/docs/react-component.html#componentdidmount

componentDidMount() 會(huì)在組件掛載后(插入 DOM 樹中)立即調(diào)用。依賴于 DOM 節(jié)點(diǎn)的初始化應(yīng)該放在這里。如需通過網(wǎng)絡(luò)請(qǐng)求獲取數(shù)據(jù),此處是實(shí)例化請(qǐng)求的好地方。

這個(gè)方法是比較適合添加訂閱的地方。如果添加了訂閱,請(qǐng)不要忘記在 componentWillUnmount() 里取消訂閱

你可以在 componentDidMount() 里直接調(diào)用 setState()。它將觸發(fā)額外渲染,但此渲染會(huì)發(fā)生在瀏覽器更新屏幕之前。如此保證了即使在 render() 兩次調(diào)用的情況下,用戶也不會(huì)看到中間狀態(tài)。請(qǐng)謹(jǐn)慎使用該模式,因?yàn)樗鼤?huì)導(dǎo)致性能問題。

通常,你應(yīng)該在 constructor() 中初始化 state。如果你的渲染依賴于 DOM 節(jié)點(diǎn)的大小或位置,比如實(shí)現(xiàn) modals 和 tooltips 等情況下,你可以使用此方式處理

使用場(chǎng)景介紹:目前場(chǎng)景比較簡單,就是初始化的時(shí)候要渲染dom,加載數(shù)據(jù)。

當(dāng)我的組件被插入到 DOM 樹之后,就會(huì)執(zhí)行 componentDidMount 生命周期,后面就不會(huì)再次執(zhí)行這個(gè)函數(shù)。

getDerivedStateFromProps

在使用getDerivedStateFromProps生命周期之前我使用的是componentWillReceiveProps生命周期,但是最新的react會(huì)有警告,推薦使用getDerivedStateFromProps,具體兩者的區(qū)別可以自己查閱資料了解一下。

先說一下我的使用場(chǎng)景:

父組件中數(shù)據(jù)發(fā)生變化,要求子組件可以監(jiān)聽到數(shù)據(jù)發(fā)生變化,并且將數(shù)據(jù)重新渲染。

class RoamLineList extends Component<any, any> {
? constructor(props) {
? ? super(props)
? ? this.state = {
? ? ? tableData: [], // 表格,
? ? }
//
demo() {
this.state.setState({
?tableData:[
? ? ? {
? ? ? ? id:1,
? ? ? ? key:1,
? ? ? ? name:"測(cè)試"
? ? ? }
? ? ? ? ?]
})
}
? render() {
? ? return <RoamRoute flyData={this.state.tableData}></RoamRoute>
? ? }

執(zhí)行demo方法向tableData中添加一條數(shù)據(jù),在子組件中監(jiān)聽到。

每次執(zhí)行demo()方法子組件都可以通過getDerivedStateFromProps生命周期獲取數(shù)據(jù)

static getDerivedStateFromProps(nextProps: any) {
? ? const data = nextProps.flyData
? ? return {
? ? ? roamLineData: [...data]
? ? }
? }

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React useContext與useReducer函數(shù)組件使用

    React useContext與useReducer函數(shù)組件使用

    useContext和useReducer 可以用來減少層級(jí)使用, useContext,可以理解為供貨商提供一個(gè)公共的共享值,然后下面的消費(fèi)者去接受共享值,只有一個(gè)供貨商,而有多個(gè)消費(fèi)者,可以達(dá)到共享的狀態(tài)改變的目的
    2023-02-02
  • React中組件通信的幾種主要方式

    React中組件通信的幾種主要方式

    React知識(shí)中一個(gè)主要內(nèi)容便是組件之間的通信,以下列舉幾種常用的組件通信方式,通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-10-10
  • react實(shí)現(xiàn)簡單的拖拽功能

    react實(shí)現(xiàn)簡單的拖拽功能

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)簡單的拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • React反向代理與CSS模塊化的使用案例

    React反向代理與CSS模塊化的使用案例

    這篇文章主要介紹了React反向代理與CSS模塊化的使用案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • React中的useMemo 和 useEffect 執(zhí)行順序

    React中的useMemo 和 useEffect 執(zhí)行順序

    在 React 組件的渲染過程中,useMemo 和 useEffect 的執(zhí)行順序是不同的,本文給大家介紹React中的useMemo 和 useEffect 哪個(gè)先執(zhí)行,感興趣的朋友一起看看吧
    2025-01-01
  • 淺談react路由傳參的幾種方式

    淺談react路由傳參的幾種方式

    這篇文章主要介紹了淺談react路由傳參的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • React自定義hooks同步獲取useState的最新狀態(tài)值方式

    React自定義hooks同步獲取useState的最新狀態(tài)值方式

    這篇文章主要介紹了React自定義hooks同步獲取useState的最新狀態(tài)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React中useRef hook的簡單用法

    React中useRef hook的簡單用法

    useRef是react的自定義hook,它用來引用一個(gè)不需要渲染的值,這篇文章介紹useRef的簡單用法,感興趣的朋友一起看看吧
    2024-01-01
  • antd之RangePicker設(shè)置默認(rèn)值方式

    antd之RangePicker設(shè)置默認(rèn)值方式

    這篇文章主要介紹了antd之RangePicker設(shè)置默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React如何使用錯(cuò)誤邊界(Error Boundaries)捕獲組件錯(cuò)誤

    React如何使用錯(cuò)誤邊界(Error Boundaries)捕獲組件錯(cuò)誤

    在 React 里,錯(cuò)誤邊界就像是一個(gè)“小衛(wèi)士”,專門負(fù)責(zé)在組件出現(xiàn)錯(cuò)誤時(shí)挺身而出,避免整個(gè)應(yīng)用因?yàn)橐粋€(gè)小錯(cuò)誤就崩潰掉,下面小編就來為大家介紹一下如何利用它捕獲組件錯(cuò)誤吧
    2025-03-03

最新評(píng)論

石嘴山市| 北宁市| 遵义县| 康平县| 疏勒县| 六安市| 诏安县| 敦化市| 滦平县| 金门县| 读书| 徐闻县| 韶山市| 双峰县| 浦北县| 尉犁县| 金乡县| 安福县| 鄂托克旗| 班玛县| 光泽县| 密云县| 沽源县| 广水市| 云霄县| 堆龙德庆县| 西峡县| 慈利县| 滨海县| 黑水县| 鹤山市| 连江县| 承德市| 宝山区| 吴川市| 延长县| 孟津县| 卓资县| 萍乡市| 高州市| 晋宁县|