React中Context API的应用
在之前react的工程项目中,关于数据流动以及父子组件中数据通信大都是通过react-redux、redux来完成,虽然可以解决问题,但是这种数据管理是较为复杂的,在最新的react16.3中推出了Context API,降低了开发的复杂度。 下面通过代码来进行详细的分析 首先创建一个context
的实例
import React from 'react';
import { render } from "react-dom";
const GlobalContext = React.createContext('dark');
复制代码
生成的context
对象具有两个组件类对象
{Provider: React.ComponentType<{value: T}>,Consumer: React.ComponentType<{children: (value: T)=> React.ReactNode}>
}
复制代码
接下来创建Provider
对象,该对象类似react-redux
中的Provide
对象
class GlobalContextProvider extends React.Component {// 类似redux中的初始化状态state = {theme: 'dark'};// 类似reducerhandleContextChange = action => {switch (action.type) {case "UPDATE_THEME":return this.setState({theme: action.theme});default:return;}};render() {return (<GlobalContext.Providervalue={{dispatch: this.handleContextChange,theme: this.state.theme}}>{this.props.children}</GlobalContext.Provider>);}
}
复制代码
接下来定义一个组件来改变state
const SubComponent = props => (<div>{/* 类似action,触发后改变状态 */}<buttononClick={() =>props.dispatch({type: "UPDATE_THEME",theme: "light"})}>change theme</button><div>{props.theme}</div></div>
);
复制代码
最后利用到上述提到的Consumer
对象加载状态并挂载到dom节点上
class App extends React.Component {render() {return (<GlobalContextProvider><GlobalContext.Consumer>{context => (<SubComponenttheme={context.theme}dispatch={context.dispatch}/>)}</GlobalContext.Consumer></GlobalContextProvider>);}
}render(<App />, document.getElementById("root"));
复制代码
那么是不是就是可以利用新的API来代替redux呢?答案当然是否定的 我们可以看到上述的使用Context的方式与redux很类似,因此如果很复杂的应用这样的写法无异于使代码复杂混乱,因此可以这样进行选择:
- 注入式的组件,类似背景、语言这种控制全局的变量,可以选择这种
- 对于那些复杂的数据交互,父子组件通信还是选择redux
参考文章
React's new Context API
从新的 Context API 看 React 应用设计模式
React中Context API的应用相关推荐
- React 中 Context 和 contextType的使用
React 中 Context 的使用 context Context 提供了一种方式,能够让数据在组件树中传递时不必一级一级的手动传递 一般情况下,数据在组件中,要一级一级的传递,单向数据流,比如P ...
- React 新 Context API 在前端状态管理的实践
2019独角兽企业重金招聘Python工程师标准>>> 本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较 ...
- 创建react应用程序_通过创建食谱应用程序来学习在React中使用API
创建react应用程序 Learn how to use external APIs with React and React Router in a full tutorial from Hamza ...
- react中context到底是如何传递的-源码分析
react中使用context 基本要求就是 父组件中声明Parent.prototype.getChildContext 父组件中声明Parent.childContextType 子组件声明 Ch ...
- React中Context的使用
一.概述 Context 提供了一种在组件之间共享值的方式,而不必显式地通过组件树的逐层传递 props.如果获取值和使用值的层级相隔很远,或者需要使用这个值的组件很多很分散,则可以使用Context ...
- react调用api等待返回结果_React新Context API在前端状态管理的实践
### React新Context API在前端状态管理的实践 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较为繁琐不好管理,通常我们需要使用Redu ...
- this指向、数据双向流、传递参数、JSX中循环、React中样式、路由、引入资源的其它方式、create-react-app脚手架、事件处理、获取数据、UI框架推荐、pc桌面应用electronjs
改变this指向的几种方式: //1.使用箭头函数代替原始函数写法:getState=()=>{}//2.在函数调用时给函数名加bind(this)方法:(bind中第一个参数表示修改this指 ...
- React中的组件通信——父传子、子传父、Context
0.认识组件间的通信 在开发过程中,我们会经常遇到需要组件之间相互进行通信: 比如App可能使用了多个Header,每个地方的Header展示的内容不同,那么我们就需要使用者传递给Header一些数据 ...
- react hooks使用_如何使用React Hooks和Context API构建简单的PokémonWeb App
react hooks使用 After seven years of full stack development using Ruby, Python, and vanilla JavaScript ...
最新文章
- 终于有人把Python讲清楚了!
- Remoting學習(五)----Reomoting 事件和配置文件的疑惑
- e 签宝携手神策数据,数据赋能智能办公产品服务双升级
- 一阶rc电路时间常数_波形产生电路中的RC在电路中的作用是什么
- C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
- 【征稿通知】CCF第37届中国计算机应用大会 CCF NCCA 2022
- Python判断不可变对象(字符串,整数,浮点数,数组)相等的办法以及其底层实现原理
- Socket编程入门
- 取消button的点击效果_(Vue动效)6.Vue中列表过渡效果
- C# DataTable.Rows.Add(DataRow) 该行已经属于另一个表
- Linux SMB和NFS文件共享
- java 协同编辑的多指针_多人协作项目如何保持代码风格统一
- VS通过opencv显示图片和打开相机的显示生成dll用unity调用
- c语言程序设计设计题题库,C语言程序设计题库.doc
- java中模糊查询sql怎么写_java模糊查询sql语句
- IDEA git 切换分支产生问题
- 小米发布会的米8探索者——很吓人的技术分析
- JAVA之假克隆、浅克隆、深克隆
- 深入学术研究,物理学家用VR演示弦理论猜想
- vue 中面包屑带跳转的做法