返回顶部
首页 > 资讯 > 精选 >Render props是什么
  • 192
分享到

Render props是什么

2023-06-26 07:06:08 192人浏览 泡泡鱼
摘要

小编给大家分享一下Render props是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Render propsRrender prop 是指一种在 Rea

小编给大家分享一下Render props是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Render props

Rrender prop 是指一种在 React 组件之间使用一个值为函数的 prop 共享代码的简单技术, 和 HOC 类似, 都是组件间的逻辑复用问题

更具体地说,Render prop 是一个用于告知组件需要渲染什么内容的函数。

下面看一下简单的例子:

以下组件跟踪 WEB 应用程序中的鼠标位置:

class Mouse extends React.Component {  state = { x: 0, y: 0 };  handleMouseMove = (event) => {    this.setState({      x: event.clientX,      y: event.clientY    });  }  render() {    return (      <p style={{ height: '100%' }} onMouseMove={this.handleMouseMove}>        <p>The current mouse position is ({this.state.x}, {this.state.y})</p>      </p>    );  }}class MouseTracker extends React.Component {  render() {    return (      <>        <h2>移动鼠标!</h2>        <Mouse />      </>    );  }}

当光标在屏幕上移动时,组件显示其(x,y)坐标。

现在的问题是:

我们如何在另一个组件中复用这个行为?

换个说法,若另一个组件需要知道鼠标位置,我们能否封装这一行为,以便轻松地与其他组件共享它 ??

假设产品想要这样一个功能: 在屏幕上呈现一张在屏幕上追逐鼠标的猫的图片。

我们或许会使用 <Cat mouse={{ x, y }} prop 来告诉组件鼠标的坐标以让它知道图片应该在屏幕哪个位置。

class Cat extends React.Component {  render() {    const mouse = this.props.mouse;    return (      <img src="/cat.jpg" style={{ position: 'absolute', left: mouse.x, top: mouse.y }} />    );  }}

这个需求如此简单,你可能就直接修改Mouse组件了:

class Mouse extends React.Component {  state = { x: 0, y: 0 };  handleMouseMove = (event) => {    this.setState({      x: event.clientX,      y: event.clientY    });  }  render() {    return (      <p style={{ height: '100%' }} onMouseMove={this.handleMouseMove}>        <Cat mouse={this.state} />      </p>    );  }}

巴适~ 简单粗暴, 一分钟完成任务。

可是,如果下次产品再要想加条狗呢

以上的例子,虽然可以完成了猫追鼠标的需求,还没有达到以可复用的方式真正封装行为的目标。

当我们想要鼠标位置用于不同的用例时,我们必须创建一个新的组件,专门为该用例呈现一些东西.

这也是 render prop 的来历:

我们可以提供一个带有函数 prop 的 <Mouse> 组件,它能够动态决定什么需要渲染的,而不是将 <Cat> 硬编码到 <Mouse> 组件里.

修改一下上面的代码:

class Cat extends React.Component {  render() {    const mouse = this.props.mouse;    return (      <img src="/cat.jpg" style={{ position: 'absolute', left: mouse.x, top: mouse.y }} />    );  }}class Mouse extends React.Component {  state = { x: 0, y: 0 };  handleMouseMove = (event) => {    this.setState({      x: event.clientX,      y: event.clientY    });  }  render() {    return (      <p style={{ height: '100%' }} onMouseMove={this.handleMouseMove}>        {this.props.render(this.state)}      </p>    );  }}class MouseTracker extends React.Component {  render() {    return (      <p>        <h2>移动鼠标!</h2>        <Mouse render={mouse => (          <Cat mouse={mouse} />        )}/>      </p>    );  }}

提供了一个render 方法,让动态决定什么需要渲染。

事实上,render prop 是因为模式才被称为 render prop ,不一定要用名为 render 的 prop 来使用这种模式。

任何被用于告知组件需要渲染什么内容的函数 prop, 在技术上都可以被称为 "render prop".

另外,关于 render prop 一个有趣的事情是你可以使用带有 render prop 的常规组件来实现大多数高阶组件 (HOC)。

例如,如果你更喜欢使用 withMouse HOC 而不是 <Mouse> 组件,你可以使用带有 render prop 的常规 <Mouse> 轻松创建一个:

function withMouse(Component) {  return class extends React.Component {    render() {      return (        <Mouse render={mouse => (          <Component {...this.props} mouse={mouse} />        )}/>      );    }  }}

也是非常的简洁清晰。

有一点需要注意的是, 如果你在定义的render函数里创建函数, 使用 render prop 会抵消使用 React.PureComponent 带来的优势。

因为浅比较 props 的时候总会得到 false,并且在这种情况下每一个 render 对于 render prop 将会生成一个新的值

class Mouse extends React.PureComponent {  // 与上面相同的代码......}class MouseTracker extends React.Component {  render() {    return (      <>        <Mouse render={mouse => ( // 这是不好的! 每个渲染的 `render` prop的值将会是不同的。          <Cat mouse={mouse} />        )}/>      </>    );  }}

在这样例子中,每次 <MouseTracker> 渲染,它会生成一个新的函数作为 <Mouse render> 的 prop,因而在同时也抵消了继承自 React.PureComponent 的 <Mouse> 组件的效果.

为了绕过这一问题,有时你可以定义一个 prop 作为实例方法,类似这样:

class MouseTracker extends React.Component {  renderTheCat(mouse) {    return <Cat mouse={mouse} />;  }  render() {    return (      <p>        <h2>Move the mouse around!</h2>        <Mouse render={this.renderTheCat} />      </p>    );  }}

以上是“Render props是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Render props是什么

本文链接: https://lsjlt.com/news/307802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Render props是什么
    小编给大家分享一下Render props是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Render propsRrender prop 是指一种在 Rea...
    99+
    2023-06-26
  • React中Render Props模式有什么用
    这篇文章主要介绍React中Render Props模式有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述Render Props模式是一种非常灵活复用性非常高的模式,它可以...
    99+
    2024-04-02
  • React 高阶组件与Render Props优缺点详解
    目录高阶组件增强型高级组件注入型高阶组件高阶组件 VS Render Props总结高阶组件 高阶组件(HOC)是一个接受组件作为参数并返回一个新组件的函数,如果多个组件有相同的逻辑...
    99+
    2022-11-16
    React 高阶组件 Render Props Render Props
  • React Props的原理是什么
    本篇文章为大家展示了React Props的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。props理解props 是 React 组件通信最重要的手段props:对于在 Rea...
    99+
    2023-06-26
  • 实例详解vue render函数中如何修改props
    Vue的render函数是一个很强大的工具,可以帮助我们更加自由地创建组件并渲染页面,并且在某些场景下render函数也可以帮我们提升一些性能。在一些情况下,我们希望在render函数中修改props,那么该怎么做呢?下面来一起看看。在我们...
    99+
    2023-05-14
  • react中props和state的区别是什么
    在React中,props和state是两个不同的概念,用于处理组件的数据。它们之间的区别如下:1. Props(属性):- Pro...
    99+
    2023-09-13
    react
  • React组件什么时候render
    本篇内容主要讲解“React组件什么时候render”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件什么时候render”吧!对于如下Demo,点击...
    99+
    2024-04-02
  • vue中Render函数有什么用
    vue中Render函数有什么用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先是v-if 的转化使用全局组件的v 值决定组件渲染的状态...
    99+
    2024-04-02
  • React组件在什么时候render
    这篇文章主要讲解了“React组件在什么时候render”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React组件在什么时候render”吧!对于如下De...
    99+
    2024-04-02
  • vue中render function code有什么用
    这篇文章主要介绍vue中render function code有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue核心执行过程图vue核心的执行过程主要分为这几个阶段:&n...
    99+
    2024-04-02
  • Yii中render和renderPartial有什么区别
    在Yii中,render和renderPartial是两种渲染视图的方式,它们有如下区别:1. render会渲染完整的视图文件,包括布局文件和视图文件。而renderPartial只会渲染指定的视图文件,不包含布局文件。2. rend...
    99+
    2023-08-11
    Yii render renderPartial
  • Vue中props组件和slot标签的区别是什么
    本文小编为大家详细介绍“Vue中props组件和slot标签的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue中props组件和slot标签的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • React中的render什么时候执行过程
    这篇文章主要介绍了React中的render什么时候执行过程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们都知道Render在组件实例化...
    99+
    2024-04-02
  • Vue中为什么要引入render函数的实现
    目录前言背景原理后记前言 使用Vue脚手架创建项目的入口文件main.js中,默认代码如下: import Vue from 'vue' import App from './App...
    99+
    2024-04-02
  • vue中组件的props属性有什么用
    这篇文章主要介绍vue中组件的props属性有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题一:那props具体是怎么使用呢?原理又是什么呢?往下看1、【定义被调用组件】首先,我们先定义一个person组件...
    99+
    2023-06-25
  • React#31的render怎么解决
    这篇文章将为大家详细讲解有关React#31的render怎么解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。卡颂日常从事基础架构相关工作。这次接到一个任...
    99+
    2024-04-02
  • Vue中props怎么用
    这篇文章主要为大家展示了“Vue中props怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中props怎么用”这篇文章吧。前言:在Vue中通过props,可以将原本孤立的组件串联起来...
    99+
    2023-06-21
  • vue中Render函数怎么使用
    这篇文章主要介绍“vue中Render函数怎么使用”,在日常操作中,相信很多人在vue中Render函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中Render函数怎么使用”的疑惑有所帮助!...
    99+
    2023-07-04
  • React-Native中props怎么用
    这篇文章将为大家详细讲解有关React-Native中props怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。props就是属性,是为了描述一个组件的特征而存在的。...
    99+
    2024-04-02
  • Vue3.0中怎么监听props
    这篇文章主要讲解了“Vue3.0中怎么监听props”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3.0中怎么监听props”吧!Vue3.0监听props的方法第一种直接监听这个pr...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作