小编给大家分享一下Render props是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Render propsRrender prop 是指一种在 React组件之间
使用一个值为函数的 prop共享代码
的简单技术, 和 HOC 类似, 都是组件间的逻辑复用问题
。更具体地说,Render prop 是一个用于告知组件需要渲染什么内容
的函数。下面看一下简单的例子:以下组件跟踪 Web 应用程序中的鼠标位置:Thecurrentmousepositionis({this.state.x},{this.state.y})当光标在屏幕上移动时,组件显示其(x,y)坐标。现在的问题是:我们如何在另一个组件中复用这个行为?换个说法,若另一个组件需要知道鼠标位置,我们能否封装这一行为,以便轻松地与其免费云主机域名他组件共享它 ??假设产品想要这样一个功能: 在屏幕上呈现一张在屏幕上追逐鼠标的猫的图片。我们或许会使用
classCatextendsReact.Component{render(){constmouse=this.props.mouse;return();}}
这个需求如此简单,你可能就直接修改Mouse组件了:
classMouseextendsReact.Component{state={x:0,y:0};handleMouseMove=(event)=>{this.setState({x:event.clientX,y:event.clientY});}render(){return();}}
巴适~ 简单粗暴, 一分钟完成任务。
可是,如果下次产品再要想加条狗呢
?
以上的例子,虽然可以完成了猫追鼠标的需求,还没有达到以可复用的方式
真正封装行为的目标。
当我们想要鼠标位置用于不同的用例时,我们必须创建一个新的组件,专门为该用例呈现一些东西.
这也是 render prop 的来历:
我们可以提供一个带有函数 prop 的
组件,它能够动态决定
什么需要渲染的,而不是将 硬编码
到
修改一下上面的代码:
classCatextendsReact.Component{render(){constmouse=this.props.mouse;return();}}classMouseextendsReact.Component{state={x:0,y:0};handleMouseMove=(event)=>{this.setState({x:event.clientX,y:event.clientY});}render(){return({this.props.render(this.state)}
);}}classMouseTrackerextendsReact.Component{render(){return(移动鼠标!
( )}/>
这个需求如此简单,你可能就直接修改Mouse组件了:再要想加条狗呢
?以上的例子,虽然可以完成了猫追鼠标的需求,还没有达到以可复用的方式
真正封装行为的目标。当我们想要鼠标位置用于不同的用例时,我们必须创建一个新的组件,专门为该用例呈现一些东西.这也是 render prop 的来历:我们可以提供一个带有函数 prop 的
组件,它能够动态决定
什么需要渲染的,而不是将 硬编码
到 任何被用于告知组件需要渲染什么内容的函数 prop, 在技术上都可以被称为 "render prop".
另外,关于 render prop 一个有趣的事情是你可以使用带有 render prop 的常规组件来实现大多数高阶组件 (HOC)。例如,如果你更喜欢使用 withMouse HOC 而不是 抵消
使用 React.PureComponent 带来的优势。因为浅比较 props 的时候总会得到 false,并且在这种情况下每一个 render 对于 render prop 将会生成一个新的值
。在这样例子中,每次 绕过这一问题
,有时你可以定义一个 prop 作为实例方法
,类似这样:以上是“Render props是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云主机行业资讯频道!
相关推荐: react 16.8版本新特性及对react开发的影响是什么
本篇内容主要讲解“react16.8版本新特性及对react开发的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react16.8版本新特性及对react开发的影响是什么”吧!Facebook团队对社区上…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。