react之useConntext——便我们获取Context中的数据源——跨层级通信解决方案

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react之useConntext——便我们获取Context中的数据源——跨层级通信解决方案相关的知识,希望对你有一定的参考价值。

useConntext

跨组件通信
以前只需:数据源,用provder包裹。Consumer消费,不直观,不优雅;
辅助钩子函数,方便函数组件使用context对象而去使用的。


conntext通信方式,使用reacat提供的Provider, Consumer 来完成共同数据源,即数据的生产者和消费者。


useContext 它是提供给函数组件用来方便的去调用context对象而使用,你不一定非要用,但是用它可以方便调用


appconnext.js文件;

import  createContext  from "react";
const conntext = createContext();
export const Provider,Consumer = conntext
export default conntext;

之前这种写法得配合 Consumer和回调函数返回值使用,特麻烦

  • 使用组件来调用context中的数据,不太建议,因为这样不直观,也乱
import React,  useState, useContext  from 'react'
import  Provider, Consumer  from "./conntext/appconnext"
const Child1 = () => 
    return (
        <div>
            <h3>Child1</h3>
            <Consumer>
                
                    (contextState) => (<div>contextState.name</div>)
                
            </Consumer>
            <hr />
        </div>
    )

const App = () => 
    const [name, setName] = useState('张三')
    const changeName = name => setName(name)
    return (
        <div>
            <Provider value= name, changeName >/* 提供数据源,包裹的是可以消费的组件 */
                <Child1 />
            </Provider>
        </div>
    )


export default App

使用useContext简化为数据源进行操作
Context对象解决跨层级组件通信方案
调用方案
💙Consumer 函数组件和类组件
🧡static contextType 针对于类组件
💚useContext 针对于函数组件
使用useContext可以方便我们获取Context中的数据源

import React,  useState, useContext  from 'react'
import ctx,  Provider, Consumer  from "./conntext/appconnext"
const Child2 = () => 
    const contextState = useContext(ctx)/* 使用useContext简化为数据源进行操作 */
    return (
        <div>
            <h3>Child2</h3>
            contextState.name
            <button
                onClick=() => 
                    contextState.changeName(Date.now() + '')
                
            >
                修改姓名
            </button>
        </div>
    )


const App = () => 
    const [name, setName] = useState('张三')
    const changeName = name => setName(name)
    return (
        <div>
            <Provider value= name, changeName >/* 提供数据源,下面是消费组件 */
                <Child1 />
                <Child2 />
            </Provider>
        </div>
    )


export default App

以上是关于react之useConntext——便我们获取Context中的数据源——跨层级通信解决方案的主要内容,如果未能解决你的问题,请参考以下文章

小白学react之网页获取微信用户信息

稀饭react native 实战系列教程之影片数据获取并解析

小白学react之restful api获取服务器数据实战

React Native之Fetch简单封装获取网络状态

Makefile之深入浅出

react入门系列之todolist代码优化(使用react 新特性,es6语法)