如果你创建了类似于下面的 Twitter 元素,那么它相关的类定义是啥样子的?
2024-08-27 03:46:02
代码:
<Twitter username='tylermcginnis33'>
{(user) => user === null
? <Loading />
: <Badge info={user} />}
</Twitter>
代码:
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
}
如果你还不熟悉回调渲染模式(Render Callback Pattern),这个代码可能看起来有点怪。
这种模式中,组件会接收某个函数作为其子组件,然后在渲染函数中以 props.children 进行调用:
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>
.
最新文章
- 手机web如何实现多平台分享
- HTTP 协议整理(转)
- Red Hat Enterprise Linux Server 6.5安装GCC 4.9.2
- CE STEPLDR
- EventBus使用详解(一)
- Java 生成验证码
- Writing Text Files On The Client in Oracle Forms 10g
- js 函数和变量的提升
- java 字节流和字符流的区别 转载
- Request、Servlet及其子接口
- 【服务器环境搭建-Centos】tmpfs,【转载】
- Mahout推荐算法基础
- Labview二进制文件的操作
- maven排除jar包冲突
- Mariadb主从复制
- PlugNT CMS v4.6.3 调用文章上一页和下一页及点击数加1
- 你分得清楚Maven的聚合和继承吗?
- Java字符串操作及与C#字符串操作的不同
- ubuntu apt 软件源的更改
- [Unity3D] 03 - Component of UI
热门文章
- 1097G Vladislav and a Great Legend
- TIMER_PWM_CAPTURE
- 谈谈Spring 注入properties文件总结
- SQL数据透视
- javascript总结37:DOM:innerText 和 innerHTML
- 使用virtualBox安装CentOS 6.3的详细步骤
- review一个javascript功能函数
- centos 6.5下安装mysql
- 菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法
- Spring Boot - Spring Cache