详解React的回调渲染模式


Posted in Javascript onSeptember 10, 2020

一、一个简单的小例子

1.父组件

<Twitter username='tylermcginnis33'>
 {(user) => user === null
  ? <Loading />
  : <Badge info={user} />}
</Twitter>

2.子组件框架

import React, { Component, PropTypes } from 'react'
import fetchUser from 'twitter'
// fetchUser take in a username returns a promise
// which will resolve with that username's data.
class Twitter extends Component {
 // finish this
}

3.子组件具体实现

import React, { Component, PropTypes } from 'react';
import fetchUser from 'twitter';
class Twitter extends Component {
 state = {
  user: null,
 }
  static propTypes = {
  username: PropTypes.string.isRequired,
 }
  componentDidMount() {
  fetchUser(this.props.username).then(user => this.setState({user}));
 }
  render() {
  return this.props.children(this.state.user);
 }
}

这种模式的优势在于将父组件与子组件解耦和,父组件可以直接访问子组件的内部状态而不需要再通过 Props 传递,这样父组件能够更为方便地控制子组件展示的 UI 界面。譬如产品经理让我们将原本展示的 Badge 替换为 Profile,我们可以轻易地修改下回调函数即可:

<Twitter username='tylermcginnis33'>
 {(user) => user === null
  ? <Loading />
  : <Profile info={user} />}
</Twitter>

到此这篇关于详解React的回调渲染模式的文章就介绍到这了,更多相关React 回调渲染内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中this关键字使用方法详解
Mar 08 Javascript
JS 事件绑定函数代码
Apr 28 Javascript
JS 跳转页面延迟2种方法
Mar 29 Javascript
Jquery.addClass始终无效原因分析
Sep 08 Javascript
Jquery解析Json格式数据过程代码
Oct 17 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 #Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 #Javascript
vue中jsonp插件的使用方法示例
Sep 10 #Javascript
vue 实现一个简单的全局调用弹窗案例
Sep 10 #Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 #Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 #Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 #Javascript
You might like
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
jqueryUI tab标签页代码分享
2017/10/09 jQuery
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
Python yield 使用方法浅析
2017/05/20 Python
Python实现完整的事务操作示例
2017/06/20 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
应届生保险求职信
2013/11/11 职场文书
就业自我评价
2014/02/04 职场文书
教师求职自荐信
2014/03/09 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
实名检举信范文
2015/03/02 职场文书
结婚典礼致辞
2015/07/28 职场文书
高三英语教学反思
2016/03/03 职场文书