美文网首页react
React使用Context实现多层组件传参

React使用Context实现多层组件传参

作者: kkc_hq | 来源:发表于2020-12-27 23:14 被阅读0次

前言
在日常的开发中,经常会使用到父子组件的形式,但面对更加复杂的业务时,使用组件的层级经常会多层组件,那如果是用父子组件的传参方式,一层层传递,那代码显得很乱,维护起来也麻烦,React官方也为此推出了Context的API来解决这种问题 官方文档

一、Context

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

二、createContext

创建一个 Context对象,简单来说就是创建上下文的容器,用来共享数据。

三、如何使用

官方文档和网上的例子 大多数都是在同一个文件内举例的,结合实际开发,我这边就举例多文件内的使用
1、创建容器,新建一个createContext.js文件

import { createContext } from 'react';
const context = createContext(null);
export default context;

2、在需要父组件的文件内引入并使用

//Parents.js
import React, { useState } from 'react';

import context from '@/components/kkc/createContext';
import Children from '@/components/Children'
const Parents = () => {
  const [state,setState] = useState([])
  const onClose = ()=>{}
  return (
    <div>
      {/*value=需要共享的数据,也可以是方法 */}
      <context.Provider
        value={{
          state,
          setState,
          onClose,
        }}
      >
        {/*子组件*/}
        <Children/>
      </context.Provider>
    </div>
  );
};
export default Parents;

3、子组件接收并使用

//Children.js
import React, { useContext } from 'react';

import context from '@/components/kkc/createContext';
import ChildrenOther from '@/components/ChildrenOther'
const Children = () => {
  // 接收父组件共享的数据和方法,这样子可以直接改变共享的数据
  const {  state, setState, onClose } = useContext(context) || {};

  return (
    <div>
       <ChildrenOther/>
    </div>
  );
};
export default Children;

第N层使用也是如此,需要引入封装好的createContext

//ChildrenOther.js
import React, { useContext } from 'react';
import context from '@/components/kkc/createContext';

const ChildrenOther = () => {
  // 接收父组件共享的数据和方法,这样子可以直接改变共享的数据
  const {  state, setState, onClose } = useContext(context) || {};

  return (
    <div>
     
    </div>
  );
};
export default ChildrenOther;

以上纯粹是个人理解,记录一下,如有不正确的地方欢迎指教下

--By kkc

相关文章

  • React使用Context实现多层组件传参

    前言在日常的开发中,经常会使用到父子组件的形式,但面对更加复杂的业务时,使用组件的层级经常会多层组件,那如果是用父...

  • react+umi框架相关

    createContext Provider, Consumer多层组件嵌套传值的实现参考react.Fragme...

  • React-redux

    React-redux 底层:通过高阶组件 + context跨组件传值实现,用 包裹根元素, 解决了在组件中频繁...

  • 疑问汇总

    1. react context是怎样实现 跨组件通信的? 从Context源码实现谈React性能优化[http...

  • react组件传递参数

    基本传参props 传递数据 在子组件中 传方法 在子组件使用 context 上下文传递参数 特点 引入的con...

  • 父子组件传值的方式

    父组件传值给子组件方式1、props2、context(高级用法)React的上下文-Context3、组件组合(...

  • react传参

    react传参 基本传参 props在子组件中this.p...

  • react 组件之间通讯传值的多种方法实现

    react组件传值,大概有下面几种方法: props context redux react-router 路由切...

  • 搭建一个redux风格的 store

    上一篇文章 我们已经实现了 context, 实现了简易的多层次组件共享状态。 问题: context 中的状态的...

  • React中 Context组件传参的方法

    React组件间通信用的最多的是props,让子组件接受父组件的数据,或者通过调用父组件的函数以更改父组件的数据,...

网友评论

    本文标题:React使用Context实现多层组件传参

    本文链接:https://www.haomeiwen.com/subject/ljeanktx.html