【跨级组件的通信&组件的生命周期&React的常用特性】

一、跨级组件的通信

1、在React中专门提供了一个API来实现跨级组件的通信—context

2、使用方法:

(1)从react中导入createContext

(2)通过createContext创建一个context对象

(3)从context中解构Provider、Consumer.

(4)Provider负责向后代组件传值,数据

<Provider value={ 要传的值 }>
子组件
</Provider>

(5)Consumer用于接收父、祖级组件传递下来的

<Consumer>
{
(val)=>{
处理代码
}
}
</Consumer/>

创建的context文件:context目录下的index.js

import {createContext} from "react"

const context = createContext()

const {Provider,Consumer} =context

export {Provider,Consumer}

export default  context

Father.jsx组件:

在这里插入图片描述

Child.jsx组件:

在这里插入图片描述在这里插入图片描述

(6)接收方法2:还可以通过类组件的静态属性contextType来接收,然后在组件中使用context获取数据。
类名.contextType = context

Child.jsx组件的另一种接收方法:
在这里插入图片描述效果展示:

在这里插入图片描述

二、组件的生命周期

组件的生命周期:React组件的生命周期分三个阶段

1、挂载阶段(Mounting):从组件的初始化开始,到组件创建完成并渲染到真实的DOM中

(1)constructor(props):构造函数,在函数中会初始化该组件。类组件必须继承自Component类,在写constructor时,必须加super(props)

(2)static getDerivedStateFromProps(props,state):从props中获取state。在挂载阶段可以通过该获取props和state,然后根据props对state进行修改。React16.3之后的版本可以使用

(3)render:根据return中的值生成虚拟DOM,然后提交个ReactDOM,渲染到真实的DOM中

(4)componentDidMount:组件已经挂载完成,虚拟DOM已经添加到真实的DOM中。

2、更新阶段(Updating):当组件发生了更新,从组件更新开始一直检测到组件更新完成并重新渲染到真实DOM中

(1)componentWillReceiveProps(nextProps):在该函数中调用this。在父组件更新后子组件接收到新的props时触发

(2)sholdComponentUpdate(nextProps,nextState):用于判断是否要进行组件的更新

(3)componentWillUpdate(nextProps,nextState):组件即将更新

(4)render():根据新的props和新的state生成新的虚拟DOM,将新的虚拟DOM和原来旧的虚拟DOM进行比对找到更新点,更新真实DOM

(5)componentDidUpdate(prevProps,prevState):表示组件已经更新完毕

3、卸载阶段(Unmounting):组件从真实DOM中卸载

(1)componentWillUnmount:监听组件即将卸载。可以删除组件中的一些全局的内容

三、React的常用特性

1、ref

(1)作用:

a、当ref绑定在组件上,可以帮助开发者获取组件的实例化对象

b、当ref绑定在标签上,可以获取真实的DOM节点

(2)string ref:在React16.3之前的版本中使用
☀️举个例子:

Father.jsx代码段:
在这里插入图片描述效果展示:
在这里插入图片描述

(3)createRef:在React16.3之后的版本中使用。在使用时需要先把ref绑定在组件的属性或变量中然后再和节点绑定。获取ref时,需要通过ref的current属性来获取ref中具体存储的内容。

Father.jsx组件:
在这里插入图片描述
在这里插入图片描述

2、key

key:给元素设置唯一标识。用来进行DOM元素的比对。

使用原则

(1)同一元素更新前后要保持key的统一

(2)一组元素中key值不能重复。

a、若元素没有加key属性,React会以数组索引做每个元素项的key值

b、当元素更新前后,其顺序不允许发生变化时,也使用数组索引来做key值

☀️举个例子:

Father.jsx组件:

在这里插入图片描述
效果展示:

在这里插入图片描述

3、children

children:是React中特殊的API。主要用于传递组件内部要渲染的内容。

☀️举个例子:

Popup.jsx代码段:

import React,{Component} from "react";
class Popup extends Component{
    render(){
        let {title,children} = this.props
        return (
            <div>
                <h2>{ title }</h2>
                <div>{ children }</div>
            </div>
        )
    }
}
export default Popup;

App.js代码段:

import logo from './logo.svg';
import './App.css';
import Popup from "./components/Popup"
function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />

      </header>
        <Popup title="西安邮电大学">
            <div>通信学院</div>{/*组件内部要渲染的内容*/}
        </Popup>
    </div>
  );
}

export default App;

效果展示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值