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

關(guān)于react 父子組件的執(zhí)行順序

 更新時(shí)間:2022年09月15日 14:11:11   作者:ohMyGod_123  
這篇文章主要介紹了關(guān)于react 父子組件的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react父子組件的執(zhí)行順序

react版本:17.x,在此版本中完全可以用Hooks去進(jìn)行開發(fā)了,開始先講class組件,只是為了更好的幫助理解。

在開發(fā)項(xiàng)目的過程中,由于項(xiàng)目比較大,拆分組件的結(jié)構(gòu)比較復(fù)雜,會(huì)涉及到一個(gè)組件中下面嵌套了好幾級(jí)的子級(jí)組件,這里就涉及到父子組件中生命周期的執(zhí)行順序的問題;

本文主要講兩種情況,class組件和函數(shù)組件,講一下執(zhí)行常用到的生命周期的執(zhí)行順序:

1.class組件 

這里涉及到一些react組件的生命周期函數(shù),需要一定的基礎(chǔ),這里就不再贅述,詳細(xì)可以去看react官方文檔,請(qǐng)看代碼:

import React from 'react';
 
const buildClass = (name)=>{
  return class extends React.Component{
    constructor(props) {
      super(props);
      console.log( name + ' constructor');
    }
    UNSAFE_componentWillMount() {
      console.log( name + ' componentWillMount');
    }
    componentDidMount() {
      console.log( name + ' componentDidMount');
    }
    componentWillUnmount() {
      console.log( name + ' componentWillUnmount');
    }
    UNSAFE_componentWillReceiveProps(nextProps) {
      console.log( name + ' componentWillReceiveProps(nextProps)');
    }
    shouldComponentUpdate(nextProps, nextState) {
      console.log( name + ' shouldComponentUpdate(nextProps, nextState)');
      return true;
    }
    UNSAFE_componentWillUpdate(nextProps, nextState) {
      console.log( name + ' componentWillUpdate(nextProps, nextState)');
    }
    componentDidUpdate(prevProps, prevState) {
      console.log( name + ' componetDidUpdate(prevProps, prevState)');
    }
  }
}
class Child extends buildClass('Child'){
  render(){
    console.log('Child render')
    return (
      <div>child</div>
    )
  }
}
class ClassFn extends buildClass('Parent'){
  render(){
    console.log('Parent render')
    return (
      <Child />
    )
  }
};
 
export default ClassFn;

然后在其他組件中去引用ClassFn.tsx這個(gè)文件;可以看一下頁面在初始化載入ClassFn時(shí)生命周期的執(zhí)行順序:

這里注意一下Parent就是ClassFn這個(gè)組件。

2.函數(shù)組件  hooks無依賴的情況

//HooksFn.tsx,以下是此文件對(duì)應(yīng)的代碼
import React, { useEffect } from "react";
import ReactDOM from "react-dom";
 
const Ai = props => {
  useEffect(() => {
    console.log("ai組件加載完成");
  });
  return <div className="ai" />;
};
 
const Home = props => {
  useEffect(() => {
    console.log("Home組件加載完成");
  });
  return (
    <div className="home">
      <Ai />
    </div>
  );
};
 
function HooksFn() {
  useEffect(() => {
    console.log("HooksFn組件加載完成");
  });
 
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <Home />
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}
 
export default HooksFn;

在上面的代碼中,注意一下控制臺(tái)打印出來的順序是:

ai組件加載完成 => Home組件加載完成 => HooksFn組件加載完成

如下圖所示:

此時(shí)如果effect的第二個(gè)參數(shù)有依賴對(duì)象時(shí),依然也是先執(zhí)行的子組件對(duì)應(yīng)的Hook。

子組件的effect函數(shù)的有依賴的情況如下:

//HooksFn.tsx
import React, { useEffect } from "react";
  
const Ai = props => {
  useEffect(() => {
    console.log("ai組件加載完成");
  }, [props.name]);
  return <div className="ai" />;
};
 
const Home = props => {
  useEffect(() => {
    console.log("Home組件加載完成");
  }, [props.name]);
  return (
    <div className="home">
      <Ai {...props}/>
    </div>
  );
};
 
function HooksFn(props) {
  // Hooks中有依賴的情況
  useEffect(() => {
    console.log("HooksFn組件加載完成");
  }, [props.name]);
 
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <Home {...props}/>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}
 
export default HooksFn;

在其他地方飲用水HooksFn這個(gè)組件:

import HooksFn from '@/pages/exercise/HooksFn';
 
<HooksFn name={'12'}/>

在控制臺(tái)的順序如下圖:

最近在做項(xiàng)目的時(shí)候發(fā)現(xiàn)了問題,在進(jìn)行組件拆分的時(shí)候,把其中一個(gè)很重要的請(qǐng)求放在了父組件沒拆出來,以為會(huì)先發(fā)送這個(gè)請(qǐng)求,結(jié)果排到了最后發(fā)父組件的請(qǐng)求,我當(dāng)時(shí)就特別納悶兒,為何會(huì)這樣了,后來百度了一大堆資料,才發(fā)現(xiàn)跟父子組件的執(zhí)行順序有關(guān)系。但是我就是想讓父組件對(duì)應(yīng)的那個(gè)請(qǐng)求先發(fā)送怎么辦?

最后我的解決辦法是:

把這個(gè)父組件的請(qǐng)求方法放在useLayoutEffect這個(gè)Hook中就行了。

在實(shí)際的項(xiàng)目開發(fā)過程中,確實(shí)需要會(huì)出現(xiàn)一些場(chǎng)景,需要父組件的執(zhí)行順序在子組件前面,這是后一定要注意react中生命周期方法的執(zhí)行順序,如果是在項(xiàng)目中用到Hooks組件比較多的情況,可以考慮一下使用useLayoutEffect。

以上就是本次分享的全部?jī)?nèi)容了,希望能給你工作中遇到的難題帶來幫助!也希望大家多多支持腳本之家。

相關(guān)文章

  • 30行代碼實(shí)現(xiàn)React雙向綁定hook的示例代碼

    30行代碼實(shí)現(xiàn)React雙向綁定hook的示例代碼

    本文主要介紹了30行代碼實(shí)現(xiàn)React雙向綁定hook的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 如何使用React構(gòu)建一個(gè)高效的視頻上傳組件

    如何使用React構(gòu)建一個(gè)高效的視頻上傳組件

    本文介紹了如何使用React構(gòu)建一個(gè)高效的視頻上傳組件,包括基礎(chǔ)概念、常見問題與解決方案以及易錯(cuò)點(diǎn),通過實(shí)際代碼案例,展示了如何實(shí)現(xiàn)文件大小和格式驗(yàn)證、上傳進(jìn)度顯示等功能,并詳細(xì)解釋了跨域請(qǐng)求和并發(fā)上傳控制等技術(shù)細(xì)節(jié)
    2025-01-01
  • React.js源碼解析setState流程

    React.js源碼解析setState流程

    這篇文章主要為大家介紹了React.js源碼解析setState流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 在React Router中使用JWT的實(shí)現(xiàn)

    在React Router中使用JWT的實(shí)現(xiàn)

    本文主要介紹了在React Router中使用JWT的實(shí)現(xiàn),包括創(chuàng)建AuthProvider和AuthContext,實(shí)現(xiàn)ProtectedRoute組件,以及在React項(xiàng)目中處理公共路由和受校驗(yàn)保護(hù)路由,下面就來詳細(xì)的介紹一下
    2026-06-06
  • React-hooks面試考察知識(shí)點(diǎn)匯總小結(jié)(推薦)

    React-hooks面試考察知識(shí)點(diǎn)匯總小結(jié)(推薦)

    這篇文章主要介紹了React-hooks面試考察知識(shí)點(diǎn)匯總,Hook?使你在無需修改組件結(jié)構(gòu)的情況下復(fù)用狀態(tài)邏輯,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • React反向代理與CSS模塊化的使用案例

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

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

    React中的ref屬性的使用示例詳解

    React 提供了 refrefref 屬性,讓我們可以引用組件的實(shí)例或者原生 DOM 元素,使用 refrefref,可以在父組件中調(diào)用子組件暴露出來的方法,或者調(diào)用原生 element 的 API,這篇文章主要介紹了React中的ref屬性的使用,需要的朋友可以參考下
    2023-04-04
  • React hooks的優(yōu)缺點(diǎn)詳解

    React hooks的優(yōu)缺點(diǎn)詳解

    這篇文章主要介紹了React hooks的優(yōu)缺點(diǎn)詳解,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • 在create-react-app中使用css modules的示例代碼

    在create-react-app中使用css modules的示例代碼

    這篇文章主要介紹了在create-react-app中使用css modules的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • React 全自動(dòng)數(shù)據(jù)表格組件——BodeGrid的實(shí)現(xiàn)思路

    React 全自動(dòng)數(shù)據(jù)表格組件——BodeGrid的實(shí)現(xiàn)思路

    表格是在后臺(tái)管理系統(tǒng)中用的最頻繁的組件之一,相關(guān)的功能有數(shù)據(jù)的新增和編輯、查詢、排序、分頁、自定義顯示以及一些操作按鈕。這篇文章主要介紹了React 全自動(dòng)數(shù)據(jù)表格組件——BodeGrid ,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

余庆县| 天台县| 泸水县| 惠州市| 常州市| 阜新市| 灵宝市| 乐昌市| 凤庆县| 和田市| 莎车县| 准格尔旗| 镇安县| 和林格尔县| 台北市| 曲周县| 白山市| 突泉县| 长治市| 澜沧| 江城| 吉安县| 烟台市| 连江县| 大庆市| 灵石县| 青铜峡市| 温州市| 射阳县| 深州市| 隆德县| 黄浦区| 广昌县| 昌图县| 定南县| 右玉县| 安丘市| 栾城县| 大英县| 宣城市| 墨脱县|