我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ReactRenderProps共享代码技术

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ReactRenderProps共享代码技术

介绍

  • Render Props是指在React组件之间使用一个值为函数的prop共享代码的技术
  • 具有render prop的组件接受一个返回React元素的函数,并在组件内部通过调用此函数来实现自己的渲染逻辑
  • 主要用于抽离逻辑,进行代码复用

使用

以官方文档的Mouse & Cat示例为例

  • 创建Mouse组件,此组件仅用于提供复用的状态逻辑代码(状态、方法等)
  • 将复用的状态作为props.render(state)方法的参数,暴露到组件外部
  • 使用props.render()的返回值作为要渲染的内容
import React from 'react'
class Mouse extends React.Component {
	// 省略操作方法
	render(){
		return this.props.render(this.state)
	}
}
//根组件
export default class App extends React.Component {
	render(){
		<Mouse render={ mouse => (
			<div>当前鼠标位置 {mouse.x} {mouse.y}<div>
		)}/>
		//此处的mouse参数实际上为Mouse组件的state,因为这个函数是在Mouse组件的render()中传参调用的
	}
}

注意:并不是该模式名叫render props就一定要用名为renderprop。你可以使用任意名称的prop,它只是一个接收返回React元素的函数的prop

实际上,视图是由父组件传入的返回React元素的函数决定的,Mouse组件中的render()生命周期函数只是调用这个由prop传入的函数,并由该函数返回视图

使用children prop代替render prop

也可以使用组合模式来实现组件间的代码重用,该方法类似于Vue中Slot的概念

import React from 'react'
class Mouse extends React.Component {
	// 省略操作方法
	render(){
		return this.props.children(this.state)
	}
}
//根组件
export default class App extends React.Component {
	render(){
		<Mouse>
			{ mouse => (
				<div>当前鼠标位置 {mouse.x} {mouse.y}<div>
			)}
		</Mouse>
	}
}

由于这一技术需要向组件传递一个函数,所以推荐对children进行类型检查

import PropTypes from 'prop-types'
Mouse.propTypes = {
	children: PropTypes.func.isRequired
}

Render props 与 React.PureComponent 同时使用

注意

如果在render方法中创建函数,那么使用render prop会抵消使用React.PureComponent带来的优势

因为每次调用render()进行渲染时都会创建一个新的函数,这将导致浅比较props的时候prevProps === nextProps始终为false

class Mouse extends React.PureComponent {
  // 与上面相同的代码......
}
class MouseTracker extends React.Component {
  render() {
    return (
      <div>
        <Mouse render={mouse => (
          <Cat mouse={mouse} />
        )}/>
      </div>
    );
  }
}

在这个示例中,由于Mouse组件的render prop传输的函数是在render()中定义的,这将导致每次MouseTracker渲染时生成一个新的函数作为Mouse组件的render prop,因而抵消了继承自React.PureComponent的效果

解决方案

为了解决这一问题,可以定义一个实例方法传给render prop

class MouseTracker extends React.Component {
  // 定义为实例方法,`this.renderTheCat`始终
  // 当我们在渲染中使用它时,它指的是相同的函数
  renderTheCat(mouse) {
    return <Cat mouse={mouse} />;
  }
  render() {
    return (
      <div>
        <h1>Move the mouse around!</h1>
        <Mouse render={this.renderTheCat} />
      </div>
    );
  }
}

到此这篇关于React Render Props共享代码技术的文章就介绍到这了,更多相关React Render Props内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ReactRenderProps共享代码技术

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ReactRenderProps共享代码技术

renderprops是指一种在React组件之间使用一个值为函数的prop共享代码的技术。简单来说,给一个组件传入一个prop,这个props是一个函数,函数的作用是用来告诉这个组件需要渲染什么内容,那么这个prop就成为renderprop
2023-01-29

江门Go语言社区:共建共享的技术发展平台

江门Go语言社区:共建共享的技术发展平台随着计算机技术的飞速发展,人们对编程语言的需求也越来越多样化。Go语言作为一种新兴的编程语言,在软件开发领域有着广泛的应用和发展前景。为了促进江门地区Go语言爱好者之间的交流与合作,推动技术的共建共
江门Go语言社区:共建共享的技术发展平台
2024-02-22

PHP CI/CD 如何促进代码审查和代码共享?

ci/cd 增强了 php 开发中的代码审查和代码共享,通过 github actions 实现代码审查自动化,包括拉取请求评论、codeql 扫描和请求审查。此外,ci/cd 管道可自动构建、测试和部署共享组件库,从而提高效率和可靠性,确
PHP CI/CD 如何促进代码审查和代码共享?
2024-05-09

Win10共享打印机错误代码709怎么办

错误代码709表示您的电脑无法访问共享打印机。以下是一些可能的解决方法:1. 检查网络连接:确保您的电脑与共享打印机连接在同一个网络中,并且网络连接正常。2. 检查共享设置:确保共享打印机的共享设置正确。在共享打印机所连接的电脑上,打开“控
2023-09-17

技术分享 | 安全地无密码登录 MySQL

作者:丹尼尔·古斯曼布尔戈斯翻译:管长龙原文:https://www.percona.com/blog/2019/11/01/use-mysql-without-a-password/有人说最好的密码就是你不用记忆的。auth_socket 插件和 Maria
技术分享 | 安全地无密码登录 MySQL
2018-01-05

低代码开发平台技术方案

随着云计算和人工智能技术的快速发展,企业对应用开发的需求也日益增加。然而,传统的应用开发方式需要大量的编码工作量和高昂的人力成本。为了解决这一问题,低代码开发平台应运而生。本文将介绍低代码开发平台的技术方案,探讨其优势和应用场景。详细说明:1.概念定义低代码开发平台是一种基于图形化界面的开发工具,它提供了一系列的
低代码开发平台技术方案
2024-01-17

Android热修复技术原理中的代码热修复技术是什么

本篇内容主要讲解“Android热修复技术原理中的代码热修复技术是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android热修复技术原理中的代码热修复技术是什么”吧!一、底层热替换原理1
2023-06-20

Git代码合并技巧:项目经验分享

Git代码合并技巧:项目经验分享在软件开发过程中,代码合并是一个非常重要的环节。特别是在多人协作开发的项目中,不同开发者所创建的分支需要进行合并,以确保代码的完整性和一致性。本文将分享一些Git代码合并的技巧和经验,帮助开发者更加高效地进行
Git代码合并技巧:项目经验分享
2023-11-03

Git代码合并技巧实战经验分享

Git代码合并技巧实战经验分享Git是目前最受欢迎的版本控制系统之一,许多开发人员使用Git来管理他们的代码库。在多人协作的开发环境中,经常需要合并不同开发者的代码。然而,代码合并可能导致冲突和其他问题,特别是当大规模的代码更改涉及到多个分
Git代码合并技巧实战经验分享
2023-11-02

Go:具有共享代码的微服务的存储库布局

Go是一种强大的编程语言,近年来在微服务架构中越来越受欢迎。它的简洁性、高效性和并发性使其成为构建高性能应用程序的理想选择。在使用Go构建微服务时,存储库的布局是一个重要的考虑因素。在本文中,php小编香蕉将介绍一种具有共享代码的微服务存储
Go:具有共享代码的微服务的存储库布局
2024-02-09

Python爬虫技术入门实例代码分析

这篇“Python爬虫技术入门实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python爬虫技术入门实例代码分析
2023-07-05

编程热搜

目录