一、使用props.children访问嵌套数据

import React from 'react';

class Button extends React.Component {
render () {
return (
<Element>I <Like /> React</Element>
)
}
}
const Element = (props) =>
<button>{ props.children }</button> class Like extends React.Component {
render () {
return (
<span> &hearts; </span>
)
}
} export default Button;

通过props.children不仅拿到了自身的文本,而且拿到了<Like>中的内容。

二、自定义propTypes验证子组件props

import React from 'react';

class Check extends React.Component {
render () {
return (
<Title />
)
}
} const Title = (props) =>
<h2>the Title: { props.title }</h2> Title.propTypes = {
title(props, propName,component) {
// 验证是否为空
if (!(propName in props)) {
return new Error(`missing ${propName}`)
}
// 验证属性值的长度
if (props[propName].length < 6) {
return new Error(`the ${propName} is too short.`)
}
}
} export default Check

对代码做如下修改:

即可消除报错信息。

2. 类型校验

上述代码运行后会报错

代码修改:

报错消失。

如果是类声明组件,使用下面的代码进行验证:

class Element extends React.Component {
const propTypes = {
color: PropTypes.String.isRequired
}
//........
}

四、默认props值 defaultProps

上述代码不会产生报错,因为设置了defaultProps.

五、ref获取特定组件的引用

下面定义了两个span,想要分别对应两个不同的<input />标签中的内容。

import React from 'react';
import ReactDOM from 'react-dom' class Twins extends React.Component {
constructor () {
super();
this.state = {
a: '',
b: ''
}
}
update (e) {
this.setState({
a: ReactDOM.findDOMNode(this.a).value,
b: ReactDOM.findDOMNode(this.b).value
})
} render () {
return (
<div>
<Input
ref={component => this.a = component}
update={this.update.bind(this)} />
<span>{this.state.a}</span>
<hr></hr>
<Input
ref={component => this.b = component}
update={this.update.bind(this)} />
<span>{this.state.b}</span>
</div>
)
}
} class Input extends React.Component {
render () {
return (
<input type='text' onChange={this.props.update} />
)
}
}
export default Twins

注意:这里Input一定要以class形式定义。

方法二:constructor中声明容器对象

this.myRef = React.createRef();

将其赋给特定对象。由于react自身的机制,接受ref的组件会把自己添加到容器中。

<AddForm ref={this.myRef} />

通过this.myRef.current即可获取特定子组件中的属性。

最新文章

  1. Django(4)html模板继承、模板导入、分页实现
  2. 简单的描述Java中的构造函数,及访问修饰符
  3. SVN里常见的图标及其含义
  4. Hadoop YARN资源隔离技术
  5. 初学web开发——怎么解决无法找到路径的问题
  6. 第三方开源框架的下拉刷新列表(QQ比较常用的)。
  7. jQuery.on() 函数详解
  8. Java中的变量与变量的作用域
  9. Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型
  10. PPTPD服务端搭建
  11. 最小化安装Linux记录
  12. 一篇不错的Gibbs Sampling解释文章,通俗易懂
  13. [Upper case conversion ] 每个单词的首小写字母转换为对应的大写字母
  14. POJ 3167 Layout(差分约束)
  15. [Kaggle] dogs-vs-cats之制作数据集[1]
  16. 面试(I)
  17. 每10秒执行定时任务-crontab
  18. AngularJS中ui-router全攻略
  19. 传统DNS的问题与HTTPDNS
  20. jdreact转换为H5注意事项

热门文章

  1. Inno Setup 升级时不再询问用户安装路径
  2. Python2 和 Python3的区别
  3. Json &amp; pickle 数据序列化
  4. MySQL简介和安装
  5. Omnicore RPC API中文文档
  6. k8s namespace限制调研
  7. Linux下进程的创建(system(); fork(); exec*())
  8. golang关键字select的三个例子, time.After模拟socket/心跳超时
  9. Jmeter系列(9)- jmeter插件入门篇
  10. Java——字节和字符的区别