欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

React生命周期方法componentDidMount

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

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

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

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

{
  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} /> */}

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

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

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

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

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

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

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

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

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

這個可以用在其他相似的情形。

React生命周期(getDerivedStateFromProps,componentDidMount)

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

componentDidMount

先看一下官方解釋

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

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

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

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

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

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

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

getDerivedStateFromProps

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

先說一下我的使用場景:

父組件中數(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:"測試"
? ? ? }
? ? ? ? ?]
})
}
? 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é)

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

相關(guān)文章

  • react以create-react-app為基礎(chǔ)創(chuàng)建項目

    react以create-react-app為基礎(chǔ)創(chuàng)建項目

    這篇文章主要介紹了react以create-react-app為基礎(chǔ)創(chuàng)建項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 基于React實現(xiàn)下拉刷新效果

    基于React實現(xiàn)下拉刷新效果

    這篇文章主要介紹了如何基于react實現(xiàn)下拉刷新效果,在下拉的時候會進入loading狀態(tài),文中有詳細(xì)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • React18?中的?Suspense?API使用實例詳解

    React18?中的?Suspense?API使用實例詳解

    這篇文章主要為大家介紹了React18?中的?Suspense?API使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • react使用antd表單賦值,用于修改彈框的操作

    react使用antd表單賦值,用于修改彈框的操作

    這篇文章主要介紹了react使用antd表單賦值,用于修改彈框的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • React SSR樣式及SEO的實踐

    React SSR樣式及SEO的實踐

    這篇文章主要介紹了React SSR樣式及SEO的實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 淺談react.js 之 批量添加與刪除功能

    淺談react.js 之 批量添加與刪除功能

    下面小編就為大家?guī)硪黄獪\談react.js 之 批量添加與刪除功能。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • React事件機制源碼解析

    React事件機制源碼解析

    這篇文章主要介紹了React事件機制源碼解析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • React深入了解原理

    React深入了解原理

    React是用于構(gòu)建用戶界面的JavaScript庫,?[1]??起源于Facebook的內(nèi)部項目,該公司對市場上所有?JavaScript?MVC框架都不滿意,決定自行開發(fā)一套,用于架設(shè)Instagram的網(wǎng)站
    2022-07-07
  • React報錯Type '() => JSX.Element[]' is not assignable to type FunctionComponent

    React報錯Type '() => JSX.Element[]&apos

    這篇文章主要為大家介紹了React報錯Type '() => JSX.Element[]' is not assignable to type FunctionComponent解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • React Native日期時間選擇組件的示例代碼

    React Native日期時間選擇組件的示例代碼

    本篇文章主要介紹了React Native日期時間選擇組件的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論