React Hooks之useContext

useContext

const value = useContext(MyContext);

接收一个 context 对象(React.createContext 的返回值)并返回该 context 的当前值。当前的 context 值由上层组件中距离当前组件最近的 <MyContext.Provider>value prop 决定。

当组件上层最近的 <MyContext.Provider> 更新时,该 Hook 会触发重渲染,并使用最新传递给 MyContext providercontext value 值。
即使祖先使用 React.memoshouldComponentUpdate,也会在组件本身使用 useContext 时重新渲染。

基本使用

1.创建全局Context上下文globalContext
2.App父组件通过Provider作为共享容器,生产Provider数据
3.Son子组件作为中间容器
4.Grandson孙组件通过useContext(globalContext)获取value渲染组件

globalContext.js

import React from 'react';
export const globalContext= React.createContext({
  //默认值defaultValue
  name: 'xiaoming',
  age: 18,
  sex: 'boy'
});
export const { Provider, Consumer } = globalContext;

App.js 父组件

import React, { Component } from 'react';
import Son from './son';//引入子组件
import { Provider } from './globalContext';
export default class App extends Component {
    render() {
        let student={
			  name: 'lily',
			  age: 17,
			  sex: 'girl'
			}
        return (
            //Provider共享容器 
            //如果没有Provider就会去context的默认值
            <Provider value={student}>
                <div>
                    <Son />
                </div>
            </Provider>
        );
    }
}

son.js 子组件

import React, { Component } from 'react';
import Grandson from "./grandson.js";//引入孙组件
export default class  Son extends Component {
    render() {
	    return (
	      <Grandson />
	    );
    }
}

grandson.js 孙组件

import React, { useContext } from 'react';
import { globalContext } from "./globalContext.js";//引入Consumer容器
export default function Grandson() {
    const value = useContext(globalContext)
    const { name, age, sex } = value;
    return (
        <div>
            name:{name}
            <br />
            age:{age}
            <br />
            sex:{sex}
        </div>
    );
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哚啦A孟

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值