iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >react中context传值和生命周期源码分析
  • 287
分享到

react中context传值和生命周期源码分析

2023-07-05 13:07:30 287人浏览 薄情痞子
摘要

本篇内容主要讲解“React中context传值和生命周期源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react中context传值和生命周期源码分析”吧!假设:项目中存在复杂组件树:

本篇内容主要讲解“React中context传值和生命周期源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react中context传值和生命周期源码分析”吧!

假设:

项目中存在复杂组件树:

react中context传值和生命周期源码分析

context传值用途

数据是通过 props 属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI 主题),这些属性是应用程序中许多组件都需要的。

Context传值优点

Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props。

何时使用 Context

Context 设计目的是为了共享那些对于一个组件树而言是“全局”的数据,例如当前认证的用户、主题或首选语言。

Contextapi

1.React.createContext API 功能:创建一个 Context 对象。//代码//创建context对象的import React from 'react'let context=React.createContext();export default context; 2.Context.Provider API功能:Provider 是context对象提供的内置组件  限定在某个作用域中使用context传值。限定作用域传值。 3.Context.Consumercontext对象的内置组件<MyContext.Consumer>  {value => }</MyContext.Consumer>作用:监听订阅的context变更, 这个函数接收当前的 context 值,返回一个 React 节点。

项目案例:主题色切换。

1.创建context.js文件  创建context对象  用来做context传值。//创建context对象的import React from 'react'export default React.createContext();
2。使用context找到限定范围使用内置组件Provider {} {}        <ThemeContext.Provider>          <div className="Admin">            <div className="LeftMenu">              <LeftMenu></LeftMenu>            </div>            <div className="RightContent">              <div className="RightContent-top">                <TopHeader></TopHeader>              </div>              <div className="RightContent-bottom">                <Dashborder></Dashborder>              </div>            </div></ThemeContext.Provider>

浏览器报错:

react中context传值和生命周期源码分析

3.在使用context的组件中进行订阅左侧菜单组件import React, { Component } from "react";console.log(Component);//引入context对象import ThemeContext from "../components/context";class LeftMenu extends Component {  constructor(props) {    super(props);    this.state = {};  }  render() {    return (      <>        <div>左侧菜单</div>      </>    );  }}//class类组件存在contextType  绑定context对象LeftMenu.contextType = ThemeContext;

组件中绑定context之后使用:

react中context传值和生命周期源码分析

意味着订阅context组件的内部使用this.context获取。

render() {    //获取context    let theme = this.context;    return (      <>        <div className={theme}>左侧菜单</div>      </>    );  }

固定主体修改为动态主体

修改了context文件代码//定义默认主体色 export const themes = {  dark: {    backgroundColor: "#000",    color: "#fff",  },  light: {    backgroundColor: "#fff",    color: "#000",  },}; //创建context对象的import React from "react";export const ThemeContext = React.createContext();
app.js文件中获取主题,动态切换主题。使用主题变量constructor(props) {    super(props);    this.state = {      //将固定的主体设置为state状态      themeType: "dark",//控制主体切换      nowTheme: themes["dark"],//获取当前默认主体    };  }  render() {    //解构获取    let { nowTheme } = this.state;    return (      <>        {}        {}        <ThemeContext.Provider value={nowTheme}>

订阅组件中使用this.context获取订阅

react中context传值和生命周期源码分析

render() {    //获取context    let { backgroundColor, color } = this.context;    return (      <>      //直接绑定行内CSS        <div style={{ backgroundColor: backgroundColor, color: color }}>          左侧菜单        </div>      </>    );  }

react中context传值和生命周期源码分析

用户点击其他组件修改主题的按钮来变更主题

注意:不能直接使用this.context修改变量值//可以在provider组件上 value中携带修改函数传递。在订阅组件中获取修改方法,执行反向传递值。//修改主题变量方法  changeTheme(type) {    console.log("测试", type);    this.setState({ themeType: type, nowTheme: themes[type] });  }  render() {    //解构获取    let { nowTheme } = this.state;    return (      <>        {}        {}        <ThemeContext.Provider          value={{ ...nowTheme, handler: this.changeTheme.bind(this) }}        >          <div className="Admin">            <div className="LeftMenu">              <LeftMenu></LeftMenu>            </div>            <div className="RightContent">              <div className="RightContent-top">                <TopHeader></TopHeader>              </div>              <div className="RightContent-bottom">                <Dashborder></Dashborder>              </div>            </div>          </div>        </ThemeContext.Provider>      </>    ); //在订阅组件中直接使用 //修改主题的方法  change(themeType) {    console.log(themeType);    //获取provider传递方法    let { handler } = this.context;    handler(themeType);  }  render() {    let { themeButton } = this.state;    return (      <>        <div>          <span>主题色:</span>          <div>            {}            {themeButton.map((item, index) => {              return (                <button key={index} onClick={this.change.bind(this, item.type)}>                  {item.name}                </button>              );            })}          </div>        </div>      </>    );

添加自定义颜色

 {}          背景色:          <input            type="color"            name="selectbGColor"            value={selectbgColor}            onChange={this.changeColor.bind(this)}          />          字体色:          <input            type="color"            name="selectColor"            value={selectColor}            onChange={this.changeColor.bind(this)}          />          <button onClick={this.yesHandler.bind(this)}>确认</button>   //代码区域操作事件向父级传递参数     //确认修改  yesHandler() {    let { myhandler } = this.context;    let { selectbgColor, selectColor } = this.state;    console.log(selectbgColor, selectColor);    myhandler(selectbgColor, selectColor);  }

添加监听context变化

 {}          <ThemeContext.Consumer>            {(value) => {              let { backgroundColor, color } = value;              return (                <>                  <span>背景色:{backgroundColor}</span>                  <span>文字色:{color}</span>                </>              );            }}          </ThemeContext.Consumer>

react中context传值和生命周期源码分析

类组件的生命周期

组件生命周期解释:组件初始化到销毁整个过程。

生命周期三类:

  • Mounting(挂载):已插入真实 DOM

  • Updating(更新):正在被重新渲染

  • Unmounting(卸载):已移出真实 DOM

第一个阶段:代码演示第一个阶段初始化挂载阶段import React, { Component } from "react"; class App extends Component {  constructor(props) {    super(props);    this.state = {};    console.log("初始化");  }  componentDidMount() {    console.log("挂载完成");  }  render() {    console.log("渲染");    return (      <>        <div>测试</div>      </>    );  }} export default App;

react中context传值和生命周期源码分析

添加了挂载之前周期

react中context传值和生命周期源码分析

 UNSAFE_componentWillMount() {    console.log("挂载之前");  } //18.x 版本中UNSAFE_ 前缀

react中context传值和生命周期源码分析

第二个阶段:更新阶段能触发类组件更新  props state

添加了更新之前周期

componentWillUpdate() {    console.log("更新之前");}

第三阶段卸载:

react中context传值和生命周期源码分析

 //卸载周期  componentWillUnmount() {    console.log("组件卸载");  }

常用周期:

react中context传值和生命周期源码分析

测试完成之后:18版本直接使用周期以上三个。

react推荐网络请求在componentDidMount卸载清除副作用   componentWillUnmount

确认当前组件是否更新周期

//确认是否更新周期  //必须带返回值  true  false  //提升性能  shouldComponentUpdate(nextProps, nextState, nextContext) {    console.log(nextProps);    if (nextProps.name == this.props.name) return false;    else return true;  }  不写该周期默认是执行更新
1.componentWillMount() - 在染之前执行,在客户端和服务器端都会执行.2.componentDidMount() - 是挂在完成之后执行一次3.componentWillReceiveProps() - 当从父类接收到 props 并且在调用另一个渲染器器之前调用。4.shouldComponentUpdatel) -根据特定条件返回 true 或 false如果你希望更新组件,请返回true 否则返它返回 false。5.componentWillUpdate() - 是当前组件state和props发生变化之前执行6.componentDidUpdate()-是当前组件state和props发生变化执行7.componentWillUnmount0) - 从 DOM 卸载组件后调用。用于清理内存空间

react中context传值和生命周期源码分析

react中context传值和生命周期源码分析

到此,相信大家对“react中context传值和生命周期源码分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: react中context传值和生命周期源码分析

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

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

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

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

下载Word文档
猜你喜欢
  • react中context传值和生命周期源码分析
    本篇内容主要讲解“react中context传值和生命周期源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react中context传值和生命周期源码分析”吧!假设:项目中存在复杂组件树:...
    99+
    2023-07-05
  • react中context传值和生命周期详解
    目录context传值用途Context传值优点何时使用 ContextContextAPI项目案例:主题色切换。添加自定义颜色添加监听context变化类组件的生命周期假设: 项目...
    99+
    2023-03-19
    react context传值和生命周期 react 生命周期 react context传值
  • rust生命周期源码分析
    本文小编为大家详细介绍“rust生命周期源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“rust生命周期源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。rust生命周期生命周期是rust中用来规定引...
    99+
    2023-07-05
  • Spring Bean生命周期源码分析
    这篇“Spring Bean生命周期源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring ...
    99+
    2023-07-05
  • 分析React中组件的生命周期
    这篇文章主要讲解了“分析React中组件的生命周期”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析React中组件的生命周期”吧!初始化在组件初始化阶段会...
    99+
    2024-04-02
  • React中生命周期的示例分析
    这篇文章将为大家详细讲解有关React中生命周期的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。React的生命周期两张图带你理解 React的生命周期React的生命周期(旧)class&nbs...
    99+
    2023-06-20
  • react源码中的生命周期和事件系统实例解析
    目录引言jsx的编译结果React组件的生命周期组件挂载的时候的执行顺序组件更新的时候的执行顺序组件卸载的时候执行顺序组件在发生错误的时候执行顺序listenToAllSupport...
    99+
    2023-01-03
    react源码生命周期事件系统 react生命周期
  • Python对象的生命周期源码分析
    本篇内容介绍了“Python对象的生命周期源码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!思考:当我们输入这个语句的时候,Python...
    99+
    2023-06-30
  • React的生命周期实例分析
    这篇文章主要讲解了“React的生命周期实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React的生命周期实例分析”吧!一、React生命周期React 生命周期分为三种状态 初始化...
    99+
    2023-07-02
  • Java之Spring Bean作用域和生命周期源码分析
    这篇文章主要讲解了“Java之Spring Bean作用域和生命周期源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java之Spring Bean作用域和生命周期...
    99+
    2023-07-05
  • 微信小程序开发中源码分析生命周期
    这篇文章主要介绍了微信小程序开发中源码分析生命周期的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发中源码分析生命周期文章都会有所收获,下面我们一起来看看吧。生命周期的概念在讲微信小程序生命周期之前,...
    99+
    2023-07-05
  • Vue八大生命周期钩子函数源码分析
    本篇内容主要讲解“Vue八大生命周期钩子函数源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue八大生命周期钩子函数源码分析”吧!一.速识概念:我们把一个对象从生成(new)到被销毁(d...
    99+
    2023-07-05
  • Spring源码解析之Bean的生命周期
    一、Bean的实例化概述 前一篇分析了BeanDefinition的封装过程,最终将beanName与BeanDefinition以一对一映射关系放到beanDefinitionMa...
    99+
    2024-04-02
  • React中的生命周期和子组件
    目录组件生命周期创建创建期获取虚拟DOM子组件组件生命周期 为了说明组件的创建,存在,销毁的过程,react提供了组件的生命周期,共分三大周期: 创建期:说明组件的创建的过程,相当于...
    99+
    2024-04-02
  • react生命周期的三个过程实例分析
    今天小编给大家分享一下react生命周期的三个过程实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • WPF中的APP生命周期及全局异常捕获源码分析
    这篇文章主要讲解了“WPF中的APP生命周期及全局异常捕获源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF中的APP生命周期及全局异常捕获源码分析”吧!APP生命周期wpf项目目...
    99+
    2023-07-05
  • Vue中生命周期的示例分析
    这篇文章将为大家详细讲解有关Vue中生命周期的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最简单的Vue 实例//html <div id=&q...
    99+
    2024-04-02
  • Angular中的生命周期实例分析
    今天小编给大家分享一下Angular中的生命周期实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • React中state属性和生命周期的使用
    目录一、React组件的state属性和生命周期1、state的定义2、更新状态(state)3、组件的生命周期(1)挂载(mount)(2)案例(隐藏或显示实时更新的计时器)(3)...
    99+
    2023-02-12
    React state属性 state生命周期 React生命周期
  • Vue中的生命周期实例分析
    这篇文章主要介绍“Vue中的生命周期实例分析”,在日常操作中,相信很多人在Vue中的生命周期实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中的生命周期实例分析”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作