iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >关于react父子组件的执行顺序
  • 494
分享到

关于react父子组件的执行顺序

2024-04-02 19:04:59 494人浏览 独家记忆
摘要

目录React父子组件的执行顺序1.class组件 2.函数组件  hooks无依赖的情况react父子组件的执行顺序 react版本:17.x,在此版本中完全可

react父子组件的执行顺序

react版本:17.x,在此版本中完全可以用Hooks去进行开发了,开始先讲class组件,只是为了更好的帮助理解。

在开发项目的过程中,由于项目比较大,拆分组件的结构比较复杂,会涉及到一个组件中下面嵌套了好几级的子级组件,这里就涉及到父子组件中生命周期的执行顺序的问题;

本文主要讲两种情况,class组件和函数组件,讲一下执行常用到的生命周期的执行顺序:

1.class组件 

这里涉及到一些react组件的生命周期函数,需要一定的基础,这里就不再赘述,详细可以去看react官方文档,请看代码:

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这个文件;可以看一下页面在初始化载入ClassFn时生命周期的执行顺序:

这里注意一下Parent就是ClassFn这个组件。

2.函数组件  hooks无依赖的情况

//HooksFn.tsx,以下是此文件对应的代码
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;

在上面的代码中,注意一下控制台打印出来的顺序是:

ai组件加载完成 => Home组件加载完成 => HooksFn组件加载完成

如下图所示:

此时如果effect的第二个参数有依赖对象时,依然也是先执行的子组件对应的Hook。

子组件的effect函数的有依赖的情况如下:

//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这个组件:

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

在控制台的顺序如下图:

最近在做项目的时候发现了问题,在进行组件拆分的时候,把其中一个很重要的请求放在了父组件没拆出来,以为会先发送这个请求,结果排到了最后发父组件的请求,我当时就特别纳闷儿,为何会这样了,后来百度了一大堆资料,才发现跟父子组件的执行顺序有关系。但是我就是想让父组件对应的那个请求先发送怎么办?

最后我的解决办法是:

把这个父组件的请求方法放在useLayoutEffect这个Hook中就行了。

在实际的项目开发过程中,确实需要会出现一些场景,需要父组件的执行顺序在子组件前面,这是后一定要注意react中生命周期方法的执行顺序,如果是在项目中用到Hooks组件比较多的情况,可以考虑一下使用useLayoutEffect。

以上就是本次分享的全部内容了,希望能给你工作中遇到的难题带来帮助!也希望大家多多支持编程网。

--结束END--

本文标题: 关于react父子组件的执行顺序

本文链接: https://www.lsjlt.com/news/167629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于react父子组件的执行顺序
    目录react父子组件的执行顺序1.class组件 2.函数组件  hooks无依赖的情况react父子组件的执行顺序 react版本:17.x,在此版本中完全可...
    99+
    2024-04-02
  • Vue父子组件生命周期的执行顺序及钩子函数
    这篇文章主要介绍“Vue父子组件生命周期的执行顺序及钩子函数”,在日常操作中,相信很多人在Vue父子组件生命周期的执行顺序及钩子函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 关于Spring BeanPostProcessor的执行顺序
    目录Spring BeanPostProcessor执行顺序Spring-BeanPostProcessor接口总结定义BeanPostProcessorBeanPostProces...
    99+
    2024-04-02
  • Java子类和父类的初始化执行顺序
      要明白子类和父类的初始化执行顺序,只需要知晓以下三点,就不会再弄错了。  1.创建子类对象时,子类和父类的静态块和构造方法的执行顺序为:父类静态块->子类静态块->父类构造器->子类构造器。深入理解为什么是这个顺序,可...
    99+
    2023-06-02
  • React Class组件生命周期及执行顺序
    一、react组件的两种定义方式 1、函数组件,简单的函数组件像下面这样,接收Props,渲染DOM,而不关注其他逻辑 function Welcome(props) { r...
    99+
    2024-04-02
  • 说说@ModelAttribute在父类和子类中的执行顺序
    @ModelAttribute在父类、子类的执行顺序 被 @ModelAttribute 注解的方法会在Controller每个方法执行之前都执行,因此对于一个Controller中...
    99+
    2024-04-02
  • 关于vue父组件调用子组件的方法
    组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功...
    99+
    2024-04-02
  • 关于@PostConstruct、afterPropertiesSet和init-method的执行顺序
    目录@PostConstruct、init-method、afterPropertiesSet() 执行顺序@PostConstruct 标注的方法在何时被谁调用init-metho...
    99+
    2024-04-02
  • 关于antd tree和父子组件之间的传值问题(react 总结)
    项目需求:点击产品树节点时获取该节点的所有父节点,同时回填表格的搜索条件,完成搜索功能,搜索结果展示在下方的table中。 写了三个组件: 现在有个业务场景交互:在orderTr...
    99+
    2024-04-02
  • react父子组件指的是什么
    这篇文章主要介绍了react父子组件指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react父子组件指的是什么文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • React父子组件间的通信是怎样进行的
    目录父子组件通信方式父传子子传父ref标记(传递数据)非父子组件通信方式状态提升(兄弟通信)发布订阅模式context状态树传参(跨组件方案)React插槽children实现插槽多...
    99+
    2023-03-14
    React父子组件通信 React组件通信
  • React父子组件间的通信是如何进行的
    本篇内容介绍了“React父子组件间的通信是如何进行的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!父子组件通信方式(1)传递数据(父传子)...
    99+
    2023-07-05
  • 关于uni-app页面Page和组件Component生命周期执行的先后顺序
    文档 页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle组件生命周期 https://uniapp.dc...
    99+
    2023-05-17
    小程序 uni-app Page uni-app Component uni-app生命周期
  • React父组件怎么调用子组件的方法
    本教程操作环境:Windows7系统、react18版、Dell G3电脑。在React中,我们经常在子组件中调用父组件的方法,一般用props回调即可。但是有时候也需要在父组件中调用子组件的方法,通过这种方法实现高内聚。有多种方法,请按需...
    99+
    2023-05-14
    React.js 前端
  • 关于join on和where执行顺序分析
    目录join on和where执行顺序1、join中相比where优先推荐on2. 逻辑上一个query的执行顺序(不是实际) 扩展:SQL执行顺序jo...
    99+
    2023-03-06
    join on和where执行顺序 join on和where SQL执行顺序
  • 关于join on和where执行顺序分析
    目录join on和where执行顺序1、join中相比where优先推荐on2. 逻辑上一个query的执行顺序(不是实际) 扩展:SQL执行顺序join在where前面join...
    99+
    2023-03-06
    join on和where执行顺序 join on和where SQL执行顺序
  • 详解React 父组件和子组件的数据传输
    目录一、父组件向子组件传递数据 1.1、父组件代码1.2、子组件代码二、子组件向父组件传输数据 2.1、父组件代码 2.2、子组件代码 在学习 React 框架组件间数据传输知识点前...
    99+
    2024-04-02
  • where子句的执行顺序是什么
    本篇内容介绍了“where子句的执行顺序是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • React嵌套组件的构建顺序
    目录在React官网中,可以看到对生命周期的描述接着看下嵌套组件接着看看传入多个组件构建总结 偏离一点点主题最后总结在React官网中,可以看到对生命周期的描述 这里有一个疑问是,...
    99+
    2024-04-02
  • React父子组件传值(组件通信)的实现方法
    目录1、父组件传值子组件2、子组件传值父组件3、兄弟组件传值1、父组件传值子组件 在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到这个para...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作