import React from 'react';  // 此句不能少
import ReactDom from 'react-dom';const Wrapper = props => <div>App component{props.count}</div>
// stateless component无状态组件,现在喜欢被称为函数式组件,现在这种定义的组件可以写state了,如state hook
function wrapper(Comp, props){  // 这个不能叫普通函数,这是个组件return <div>App component{props.count}<hr /><Comp /></div>
}// 科里化
function wrapper(Comp){return function (props){  // 返回B组件return <div>B component{props.count}<hr /><Comp /></div>}
}// 改为箭头函数,但是注意把第二个箭头后当一个整体看
const wrapper = Comp => props => <div>  {/* 传一个组件返回一个新的组件 */}B component{props.count}<hr /><Comp /></div>// 装饰器太新了,一定要用babel,但是现在的装饰器只能装饰类,不能装饰函数
@wrapper  // A = wrapper(A),注意返回的A已经不是原来的A了
// function A (props){return <div>A component</div>}  // 会报错,装饰器只能装饰类,不能装饰函数
class A extends React.Component{render(){return <div>A component</div>}
}// const B = wraper(A)ReactDom.render(// <Parent count={100} />,  // 此处要封口// <Second />,<A count="200" />,document.getElementById('root')
)

将上述的代码改为带参装饰器:

import React from 'react';  // 此句不能少
import ReactDom from 'react-dom';// 改为带参装饰器
// function wrapper(vid){
//     return function (Comp){
//         return props => {  // 返回新的组件
//             return <div>
//             金州拉文{props.name}
//             <hr />
//             <Comp inner_name="props.name"/>
//             </div>
//         }
//     }
// }let obj = {a: Green, b: KD }
const wrapper = vid => Comp => props => <div id={vid}>  {/* 传一个组件返回一个新的组件 */}金州拉文{props.name}<hr />{/* <Comp inner_name="props.name"/> */}<Comp {...props} test="Klay" {...obj}/>  {/* 相当于把对象解构成k、v对,还可以混着写 */}</div>@wrapper('test')  // 改为带参装饰器; A = wrapper('test')(A)
class A extends React.Component{render(){return <div>{this.props.name}号称金州拉文{this.props.test}  {/* 拿到的结果是Klay */}<hr />{this.props.a}<br />  {/* 拿到的结果是Green */}{this.props.b}  {/* 拿到的结果是KD */}</div>}
}ReactDom.render(<A name="Stephen Curry" />,  // 注意此处的A是装饰器返回的A,已经不是原来的A了document.getElementById('root')
)

React之函数式组件和高阶组件(装饰器、带参装饰器)相关推荐

  1. React总结篇之六_React高阶组件

    高阶组件的概念及应用 以函数为子组件的模式 这两种方式的最终目的都是为了重用代码,只是策略不同,各有优劣,开发者可以在实际工作中决定采用哪种方式. 一.高阶组件 1. 高阶组件(Higher Orde ...

  2. [react] 举例说明什么是高阶组件(HOC)的反向继承

    [react] 举例说明什么是高阶组件(HOC)的反向继承 import React from 'react';const hoc = (WrappedComponent) => {// 集成需 ...

  3. [react] 举例说明什么是高阶组件(HOC)的属性代理

    [react] 举例说明什么是高阶组件(HOC)的属性代理 function HOC(WrappedComponent) {return class HOC extends Component {re ...

  4. react ref无法获取被高阶组件包装的原始组件问题

    问题描述: react无法通过ref获取被高阶组件包装的原始组件 通过ref调用被dva connect包裹的组件报错 我们在平时使用ref获取一个组件的引用后,就可以直接通过ref调用组件自身的函数 ...

  5. react受控组件、非受控组件以及高阶组件

    受控组件 组件的state是"唯一数据源",使用受控组件时必须要绑定onchange()函数,否则会警告. 通俗来讲:就是input的vlaue值是来源于组件的state,相当于是 ...

  6. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分

    组件和高阶组件区别 by Nitish Phanse 由Nitish Phanse 为什么要对高阶组件使用代码拆分 (Why you should use code splitting with hi ...

  7. react中@withrouter_为什么 withRouter 高阶组件应该 处于最外层?

    这篇文章的主要内容是说 React 16.3 以前的 getChildContext 这个老 Context API 存在会被 PureComponent 截断的问题,React-Router 4.3 ...

  8. React中的高阶组件

    React中的高阶组件 高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合 ...

  9. React 高阶组件HOC使用总结

    HOC(高阶组件) /*HOC(高阶组件): 接收一个组件,返回包装后的组件(增强组件)- 不是React API- 是一种设计模式,类似于装饰器模式- ≈ Mixin && > ...

最新文章

  1. 执行高性能任务的强大桌面计算机是,用于高性能任务的强大的桌面计算机是一个______。...
  2. iOS直播(四)对视频进行压缩编码
  3. 筑算高程点提取插件_「教程」原来利用高程数据点建立地形模型,只需要一个键...
  4. labview波形图两个游标,LabVIEW数据可视化:使用波形图表控件逐点显示曲线的方法...
  5. linux shell写服务,Linux shell编写系统服务脚本
  6. groovy怎样从sql语句中截取表名_SQL基础教程学习笔记
  7. spring mvc 模拟数据库实现注册 登录
  8. 如何使用jquery的Highcharts
  9. string 转化 xml,并找到指定节点及节点值
  10. hbase的2.2.4版本支持哪个版本的hadoop_Hadoop 2.7 不停服升级到 3.2 在滴滴的实践
  11. 3-java学习笔记
  12. Python+Visual Studio
  13. iOS: 目前天气API 整理
  14. 容器技术Docker K8s 17 容器服务ACK基础与进阶-容器网络管理
  15. python集合运算_python set集合的基本运算
  16. TOM邮箱|163邮箱如何注册?怎么登陆?
  17. ROS节点运行管理launch文件
  18. 升级Android Q之路遇到的坑-abc_screen_simple
  19. 2007年大学生电子设计大赛国赛电源类题目设计报告
  20. 什么是百度霸屏?百度霸屏的基本流程是什么?

热门文章

  1. 【科创人独家】保利威董事长谢晓昉:不做无效直播,帮助企业打通直播营销全链路
  2. java毕业生设计校园兼职招聘系统计算机源码+系统+mysql+调试部署+lw
  3. 从携程瘫痪事件看运维的85条军规
  4. 好学6招快速减大象腿
  5. 多年炒股心得体会(转)
  6. 获取adb root权限
  7. Fegin调用时出现JSON parse error:can not deserialize instance of ...
  8. 怎么用postman测试websocket
  9. 月结4 - GR/IR重分类(Regroup) [F.19/OBYP]
  10. etcd+skydns构建私有域名解析服务器