在React 官方文档中描述render prop 时,是为了解决横切关注问题“cross-cutting concerns”。“cross-cutting concerns”指的是两个非常不一样的组件存在一些类似的功能。对于“cross-cutting concerns” 问题,React 给出了三种解决方案来复用类似功能:

1)Minxs:解决部分method类似问题,但是已被弃用,ES6 的class 不支持该属性,只有在使用插件createReactClass时可使用,存在大量的负面影响,官方已不推荐使用。(https://reactjs.org/blog/2016/07/13/mixins-considered-harmful.html)

2)HOC:高阶组件模式是React官方推荐用来取代Minxs解决“cross-cutting concerns” 问题的方案。将类似功能写在高阶组件内,差异化的功能各自封装在不同的基础组件。使用时根据需求,将基础组件作为参数传给高阶组件生成函数,返回该基础组件的高阶组件, 一般这个高阶组件会向基础组件中添加一些新的props。

3)Render Prop:这是一种模式,用来解决部分UI类似的问题。通过props传递一个返回React Element的函数给组件,组件在render时调用这个函数并将返回的React Element插入组件。这个功能与Vue的内容分发slot 功能一样。可以有多个,可以接受组件的参数。 一般在开发容器组件时,是非常需要的一个特性。例如开发一个资源位容器组件,资源位的数据获取都是公共逻辑,但是渲染时根据资源类型不一样,展示方式会不同,这时可以使用 render prop 定制自己的展示方式。Render Prop 模式可以直接使用children 属性作为prop,这时可以直接利用JSX的“Functions as Children” 特性,不使用显示的prop属性,直接将函数写在children中。

React 解决 “cross-cutting concerns” 问题相关推荐

  1. react 解决 setState 异步问题

    react 解决 setState 异步问题 参考文章: (1)react 解决 setState 异步问题 (2)https://www.cnblogs.com/crazycode2/p/97158 ...

  2. 解决Cross origin requests are only supported for protocol schemes问题

    解决Cross origin requests are only supported for protocol schemes问题 问题描述 本前端小白在学习的时候尝试按照一个网上的blog的代码来跑 ...

  3. React解决长列表方案(react-virtualized)

    github地址 高效渲染大型列表的响应式组件 使用窗口特性,即在一个滚动的范围内,呈现你给定数据的一小部分,大量缩减了呈现组件所需的时间,以及创建DOM节点的数量. 缺点:滑动过快,可能会出现空白的 ...

  4. react 解决警告Warning: Each child in a list should have a unique “key” prop.

    报错: 解决办法: 基本都是因为在循环生成多个组件的时候,没有给组件加上key引起的,所以报错警告.需要循环生成多个组件中,加上key值(唯一值)那么就不会报错了. 示例: class App ext ...

  5. React 解决鼠标移入子元素触发父元素的mouseout事件

    方法一. 用mouseleave/mouseenter代替mouseover/mouseout[最佳方法] mouseover 与 mouseenter: mouseover => 不论鼠标指针 ...

  6. 【速记】React解决IE浏览器svg标签不支持innerHTML操作的问题及相关拓展知识

    react代码资料: 文件:packages/react-dom/src/client/setInnerHTML.js /*** Copyright (c) Facebook, Inc. and it ...

  7. React解决axios跨域问题

    在React中,axios是ajax的再次封装,所以,axios具有同源策略的特点,不能跨域请求数据,如果想跨域请求数据,需要设置跨域代理,方法如下   1.需要在src一级目录下面 创建 setup ...

  8. 使用react——解决this.props.history.push无法跳转的问题

    转自: https://blog.csdn.net/yingzizizizizizzz/article/details/78751305 场景: 一个组件中,含有ul展开数组的组件,在每一行中,都能点 ...

  9. 用react解决1px问题

    1.创建公共样式  hairLine.scss 核心代码 // src/assets/styles/hairline.scss@mixin scale-hairline-common($color, ...

  10. React解决跨域问题

    1.项目安装http-proxy-middleware npm install http-proxy-middleware 2.src下新建setupProxy.js文件 const {createP ...

最新文章

  1. mybatis 使用jdbc_MyBatis笔记一
  2. [Android] 使用Include布局+Fragment滑动切换屏幕
  3. IP地址便捷修改器 V3.5 绿色版
  4. python怎么使用time模块_PYTHON的TIME模块使用
  5. linux文件操作相关函数
  6. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)
  7. 最新版 VMware 安装,虚拟机安装, Ubuntu可视化linux系统安装
  8. Linux定时备份Oracle Database 翻译
  9. PostgreSQL 12系统表(7)pg_sequence
  10. win8笔记本关闭小键盘
  11. JavaScript数据类型之Undefined、Null、Boolean
  12. 优惠券如何引流,如何做好优惠券推广,优惠券正确引流方法
  13. 整数进制转换技巧以及相关算法题讲解(简洁易懂)
  14. 简述一代、二代、三代测序技术在应用上的区别
  15. 获取Audio音乐的总时长
  16. 【学习笔记之MYSQL篇】实体联系图
  17. 【高清视频压制教程】使用MeGUI压制视频教程(以PSP视频为例)(转载)
  18. 服务器 多显卡 显示器,一台主机接多个显示器,居然有三种方法实现,提高工作效率的神器...
  19. 利用TODA进行ORACLE数据快捷导入导出
  20. 32位64位Office 2010 beta 简体中文版下载

热门文章

  1. Android 手机获取Mac地址的方法
  2. vscode修改界面颜色及风格(中文英文界面都有)
  3. java怎么才能学透彻?
  4. 格拉姆-施密特正交化
  5. 面向金融的R语言_L3
  6. 银行贷款违约风险预测
  7. 猫眼电影票房爬取到MySQL中_Scrapy爬取猫眼电影并存入MongoDB数据库
  8. dexpathlist.java_java.lang.ClassNotFoundException: Didn't find class xxx on path: DexPathList
  9. 一个程序员上了7天班后
  10. RestTemplate 超时值