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

【react】react中和vue中的provide/inject、context写法示例

react写法

在 React 中,provideinject的功能类似于 Vue.js 中的 provideinject。它们都是用于跨组件层次传递数据的。

在 React 中,没有内置的 provideinject 函数。但是,你可以使用 React 的 Context 来实现类似的功能。

Context 是 React 提供的一种机制,用于在组件树中共享数据。通过创建一个 Context 对象,可以将数据传递给子组件,无论组件层次有多深,子组件都可以通过 contextType 或者 Consumer 来访问这些数据。

下面是一个使用 Context 的简单示例:

// 创建一个 Context 对象
const MyContext = React.createContext();// 在提供者组件中设置数据
class MyProvider extends React.Component {state = {data: "需要共享的数据"};render() {return (<MyContext.Provider value={this.state.data}>{this.props.children}</MyContext.Provider>);}
}// 在消费者组件中访问数据
class MyConsumer extends React.Component {render() {return (<MyContext.Consumer>{value => <div>{value}</div>}</MyContext.Consumer>);}
}// 在组件树中使用提供者和消费者
class MyApp extends React.Component {render() {return (<MyProvider><div><h1>My App</h1><MyConsumer /></div></MyProvider>);}
}ReactDOM.render(<MyApp />, document.getElementById("root"));

上述示例中,MyProvider 组件通过 MyContext.Provider 来提供数据,MyConsumer 组件则通过 MyContext.Consumer 来消费数据。

这些是通过使用 Context 实现类似 provideinject 功能的方式。

vue组合式API的provide/inject写法

在 Vue 3 中,提供了组合式 API(Composition API)来编写组件。使用组合式 API 来实现类似 Vue 2 中 provideinject 的功能,可以按照以下方式进行:

首先,在根组件或者父组件中,使用 provide 函数来提供数据:

import { provide } from 'vue';export default {setup() {const sharedData = '需要共享的数据';provide('sharedData', sharedData);// 其他逻辑...}
};

然后,在子组件(或者后代组件)中,使用 inject 函数来访问被提供的数据:

import { inject } from 'vue';export default {setup() {const sharedData = inject('sharedData');// 使用共享数据...}
};

注意,provideinject 都需要在组件的 setup 函数中使用。provide 函数接受两个参数:第一个参数是提供的数据的键名,第二个参数是具体的数据。inject 函数接受一个参数,即提供的数据的键名,它返回对应的数据。

这样,在子组件中可以通过 sharedData 变量访问到提供的数据。如果没有找到对应的提供的数据,inject 函数会返回 undefined

需要注意的是,如果使用的是 Vue 2.x 版本,可以继续使用旧版的 provideinject API,不过在 Vue 3 中推荐使用组合式 API 来编写组件。

希望这个示例能够帮助你了解如何使用 Vue 3 的组合式 API 来实现类似 provideinject 的功能。

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

相关文章:

  • MySQL 的存储引擎(基本介绍)
  • Unity3D 实现基于物理引擎的绳子关节解析详解
  • C语言二级易忘易错易混知识点(自用)
  • js_三种方法实现深拷贝
  • 【图论经典题目讲解】CF715B - Complete The Graph
  • [office] excel中数据汇总的大全教程文字版 #知识分享#经验分享#知识分享
  • leetcode经典题库(简单)
  • python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先
  • openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优
  • UE5 C++ 创建可缩放的相机
  • Fabric中的溯源方法
  • 混子文章|蓝桥杯一题 -平方差
  • 计算机视觉基础:【矩阵】矩阵选取子集
  • 解决laravel-admin安装报错1071 Specified key was too long问题
  • 【Python---六大数据结构】
  • 一个简短的补充------对链表练习题的补充补充
  • Spring最新核心高频面试题(持续更新)
  • [计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)
  • Spring Boot 笔记 020 redis集成
  • 防火墙——计算机网络
  • 用html编写的招聘简历
  • 215数组中的第K个最大元素
  • 【动态规划】【矩阵快速幂】LeetCode2851. 字符串转换
  • 【LeetCode每日一题】单调栈 402 移掉k位数字
  • 力扣 309. 买卖股票的最佳时机含冷冻期
  • 2024年刷题记录
  • 【JGit 】简述及学习资料整理
  • python数据类型-集合set
  • excel如何指定求和
  • 服务端实时推送技术之SSE(Server-Send Events)