react中使用decorator 封装context
在传统的react context中,子组件使用context十分繁琐,如果需要使用context的子组件多的话
每个组件都需要写consumer,所有如果能使用decorator的话,就会方便很多
import React from 'react';
import MyContext from '../context.js'; class Son extends React.Component {
render() {
return (
// 每一个需要使用context的组件 你都需要用consumer包装一下
// 如果有一百个呢???? 而且写法复杂很不友好!
<MyContext.Consumer>
{value => (
<div>
<div>{value.name}</div>
<div>{value.age}</div>
</div>
)}
</MyContext.Consumer>
)
}
} export default Son;
import React from 'react';
import MyContext from '../context.js'; function withUser(Component) { // 定义一个方法,这个方法就是decorator装饰器
return class extends React.Component{ // 方法返回了一个组件 是将原组件装饰之后的组件
render() {
return (
// 装饰器统一将原组件用Consumer包装起来 并将context的value值存在组件props的指定key中,这里是user
<MyContext.Consumer>
{value => <Component user={value} {...this.props} />}
</MyContext.Consumer>
)
}
}
} export default withUser;
import React from 'react';
import withUser from './decorator'; @withUser // 装饰器的参数默认就是下面的组件了
class Son extends React.Component {
render() {
return (
<div>
{/* 经过 装饰器装饰过的组件中 props中已经有了context的值了, key是user */}
<div>{this.props.user.name}</div>
<div>{this.props.user.age}</div>
</div>
)
}
} export default Son;
react中使用decorator 封装context的更多相关文章
- 如何在react中使用decorator
2020-03-27 如何在react中使用decorator decorator目前都需要修改babel才能使用 说一下具体的操作方法 踩了一天的坑... 步骤1: yarn create reac ...
- react中对于context的理解
一.context旧版的基本使用 1.context的理解 当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递. 2.context的 ...
- React中的Context——从父组件传递数据
简介:在React中,数据可以以流的形式自上而下的传递,每当你使用一个组件的时候,你可以看到组件的props属性会自上而下的传递.但是,在某些情况下,我们不想通过父组件的props属性一级一级的往下传 ...
- react中的refs
概述 很久之前就知道refs,感觉好神秘,恰好今天突然发现字符串形式的ref在官网不推荐使用了,于是好好总结一下ref的用法,供以后开发时参考,相信对其他人也有用. 参考资料: Refs & ...
- [Web 前端] mobx教程(三)-在React中使用Mobx
copy from : https://blog.csdn.net/smk108/article/details/85053903 Mobx提供了一个mobx-react包帮助开发者方便地在React ...
- React中如何优雅的捕捉事件错误
React中如何优雅的捕捉事件错误 前话 人无完人,所以代码总会出错,出错并不可怕,关键是怎么处理. 我就想问问大家react的错误怎么捕捉呢? 这个时候: 小白:怎么处理? 小白+: ErrorBo ...
- 解读vue-server-renderer源码并在react中的实现
前言 在博客开发的过程中,有这样一个需求想解决,就是在SSR开发环境中,服务端的代码是是直接通过webpack打包成文件(因为里面包含同构的代码,就是服务端与客户端共享前端的组件代码),写到磁盘里 ...
- React中使用CSSTransitionGroup插件实现轮播图
动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...
- 在React中使用Redux
这是Webpack+React系列配置过程记录的第六篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...
随机推荐
- uwsgi模块以参数形式运行项目
1.虚拟环境中下载uwsgi模块-------pip install uwsgi 2.脚本运行案例 新建一个test.py脚本文件,写入如下内容: def application(env, start ...
- linux常用命令---终端与目录操作
终端相关操作 目录相关操作
- win10安装nodejs,修改全局依赖位置和环境变量配置
为什么要修改nodejs全局依赖位置? nodejs全局依赖安装默认位置在C盘,导致C盘文件太大,影响电脑运行速度. 步骤: 安装nodejs(在node官网下载并安装) 查看nodejs版本(在命令 ...
- 手写一个简版 asp.net core
手写一个简版 asp.net core Intro 之前看到过蒋金楠老师的一篇 200 行代码带你了解 asp.net core 框架,最近参考蒋老师和 Edison 的文章和代码,结合自己对 asp ...
- 【MySQL】Centos7 yum安装MySQL5.7.25
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 安装操作 下载并安装MySQL官方的Yum ...
- 进程间的通信——pipe通信
当进程创建管道文件后,其建立的子进程自动继承该文件. 管道通信分为命名管道和未命名管道,他们的区别是命名管道在当创建他的进程结束后,系统仍存有该文件 管道的命令格式为 pipe(fds) 其中 fds ...
- CF1353D Constructing the Array(优先队列)
Question 给你一个长度为n的全为0的序列,让你从1-n填数,填的位置为找出最长的0序列,如序列长度为奇数,则为(l+r)/2,为偶数,则为(l+r-1)/2 Solution 运用优先队列,将 ...
- Java Serializable(序列化)的总结
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...
- 附019.Rancher搭建及使用
一 Rancher概述 1.1 什么是Rancher Rancher 是为使用容器的公司打造的容器管理平台.Rancher 简化了使用 Kubernetes 的流程,方便开发者可以随处运行 Kuber ...
- cisco-GNS3-pix防火墙基本配置实操(持续更新)
一.ASA和PIX基础配置 1.ASA防火墙配置 1.GNS配置 因为使用的GNS3的版本可能不同,gns配置asa防火墙的步骤可能不同 在低版本的gns中直接在qemu选项里可以直接配置,参考:ht ...