当前位置: 首页 > news >正文

useContext

可以跨组件传值

其实主要的就是三步

1、const xxx = React.createContext();创建一个context

2、<xxx.Provider value={{ num, setNum }}>父组件设置要传递的值

3、const { num, setNum } = React.useContext(xxx);子组件下使用

特点:

1、可以有多个xxx.Provider

2、可以跨组件传递

3、可以传递多个值

store.js

import React from 'react'
const myContext = React.createContext(null);
export {myContext};

App.js

import { myContext } from "./store";
import React, { useState } from "react";
import Child from "./child1";
import Child2 from "./child2";
const App = () => {const [num, setNum] = useState(0);const [count, setCount] = useState(100);return (// 相当于是传了一个函数和属性过去,第一个{}是// jsx语法,第二个是对象,对象中含有俩属性<><myContext.Provider value={{ setNum, num }}><Child></Child></myContext.Provider><myContext.Provider value={{ setCount, count }}><Child2></Child2></myContext.Provider></>);
};export default App;

child2.js

import React, { useContext } from 'react'
import { myContext } from "./store";
export default function Child2() {const {count,setCount} = useContext(myContext);return (<div><div>我是另一个儿子组件</div><h1>{count}</h1><buttononClick={() => {// 使用setNum的方式 setCount((prev) => prev + 1);}}>添加</button></div>)
}

child1.js

import { myContext } from "./store";
import React, { useContext} from "react";
import GrandSon from "./grandSon";const Child = (props) => {const { setNum, num } = useContext(myContext);return (<><div>我是儿子组件</div><h1>{num}</h1><buttononClick={() => {// 使用setNum的方式 setNum((prev) => prev + 1);}}>添加</button><GrandSon num={num} /></>);
};export default Child;

grandSon.js(第一个孩子的子组件)

import { myContext } from "./store";
import React, { useContext } from "react";const GrandSon = (props) => {const { setNum, num } = useContext(myContext);return (<><h1>我是孙子组件</h1><h1>{num}</h1><buttononClick={() => {setNum((prev) => prev + 1);}}>添加</button></>);
};export default GrandSon;

1.当添加添加按钮时数据是同步变化的;
2.被另一个xxx.Provider包裹的子组件的数据是不受影响的,其数据是单独变化的。
在这里插入图片描述

http://www.lryc.cn/news/274999.html

相关文章:

  • Java数据结构:1. 数据结构前置知识
  • Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)
  • 如何使用RESTful API构建 web 应用程序
  • 开启Android学习之旅-4-Android集成FontAwesome
  • Qt——TCP UDP网络编程
  • 有什么安全处理方案可以有效防护恶意爬虫
  • Flutter3.X基础入门教程(2024完整版)
  • GEE——土地利用分类种两个矢量集合中不同列进行相减的方式(利用join进行连接处理)
  • mnn-llm: 大语言模型端侧CPU推理优化
  • Freemarker实现Html全站静态化
  • 16.顺子日期(14)
  • 《动手学深度学习》学习笔记 第5章 深度学习计算
  • 【Redis】非关系型数据库之Redis的介绍及安装配置
  • 3D模型轻量化
  • 数据分析——快递电商
  • 《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(8)
  • Hadoop分布式文件系统(二)
  • macOS跨进程通信: FIFO(有名管道) 创建实例
  • 推荐几个免费的HTTP接口Mock网站和工具
  • 企业数据库安全管理规范
  • react:ffcreator中FFCreatorCenter视频队例
  • 力扣(leetcode)第434题字符串中的单词数(Python)
  • django学习:页面渲染与请求和响应
  • Redis 数据一致性
  • Mac环境下反编译apk
  • 计算机网络——网络模型的组织、看法以及标准化流程
  • 【JAVA】volatile 关键字的作用
  • Next.js 第一次接触
  • CISSP 第7章:PKI和密码学应用
  • dji uav建图导航系列()ROS中创建dji_sdk节点包(二)实现代码