• react+tsx中使用`createContext, useContext`hooks


    类组件中使用props进行传值,react17后采用createContext, useContext进行共有数据传递。

    1. 导入

    import React, { useState, useEffect, createContext, useContext } from "react";
    

    createContext用于创建父组件想要赋予给子组件的值,初始要有默认值

    useContext在子组件中使用,用于接收父组件传递来的数据

    想要使用这两个hooks,还需要在父组件内使用<xxx.Provider>包裹住子组件</ xxx.Provider>

    2. 简单使用

    interface objData {
      id: number;
      name: string;
    }
    // 首先定义父组件要传递的数据初值,要在父组件外部
    const fatherDataContext = createContext<Array<objData>>([]);
    // 定义子组件
    function Son(): JSX.Element {
      //定义一个接收父元素数据的变量 可以直接使用接收到的value的值
      const fatherDataList = useContext(selectListContext);
      console.log("fatherDataList :>> ", fatherDataList);
      return <></>;
    }
    // 定义父组件
    function Father(): JSX.Element {
      const [myList, setMyList] = useState<Array<objData>>([]);
      const exapleList: Array<objData> = [
        {
          id: 1,
          name: "小敏",
        },
        {
          id: 2,
          name: "糖糖",
        },
      ];
      // 模拟网络请求,三秒后list被赋值
      useEffect(() => {
        setTimeout(() => {
          setMyList(exapleList);
        }, 3000);
      }, []);
      return (
        <>
          <p>我是父组件</p>
          {/* 在这里,需要使用父组件声明的context变量 ,value就是父组件要传递给子组件的值 */}
          <fatherDataContext.Provider value={myList}>
            <Son />
          </fatherDataContext.Provider>
        </>
      );
    }
    

    3.总结

    1. 先在公共区域申明一个createContext变量:
    const fatherDataContext = createContext<Array<objData>>([]);
    
    
    1. 在父组件内,将要共享数据的子组件使用createContext.Provider 包裹住,value就是父组件要传递的数据
     {/* 父组件内*/}
          <fatherDataContext.Provider value={myList}>
            <Son />
          </fatherDataContext.Provider>
    

    3.子组件使用useContext接收

    // 子组件内  此时fatherDataList 就是父组件中value传递来的值
    const fatherDataList = useContext(selectListContext);
    

    今天先学先用,如有不对的麻烦请指出,笔者不想误导他人,谢谢 。

    作者:致爱丽丝
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面给出原文链接并标名原文作者,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux:删除程序
    Linux:目录操作
    Linux:加载硬盘
    mysql:查询结果添加序列号
    mysql:结果集去重
    mysql:字符串转换为日期类型
    MVC:上传文件时限制文件类型
    WebApi:WebApi的Self Host模式
    WebApi:过滤器的种类
    几种知名开源富文本编辑器记录和对比(仅供参考)
  • 原文地址:https://www.cnblogs.com/hjk1124/p/15123945.html
Copyright © 2020-2023  润新知