组件的属性能够接受任意值,字符串,对象,函数等等均可以。有时,咱们须要一种机制,验证别人使用组件时,提供的参数是否符合要求。html
组件类的PropsTypes
属性,就是用来验证组件实例的属性是否符合要求react
var myTitle = React.createClass({ propsTypes:{ title:React.PropsTypes.string.isRequired, } render(){ return <h1>{this.props.title}</h1> } });
上面的Mytitle
组件有一个title
属性。PropTypes
告诉React,这个title
属性是必须的,并且必须是字符串。git
此外,getDefaultProps
方法能够用来设置组件属性的默认值。github
var MyTitle = React.createClass({ getDefaultProps:function(){ return { title:'hello world' } } render(){ return ( <h1>{this.props.title}</h1>; ) } }) ReactDOM.render( <MyTitle />, document.body )
上面代码会输出“hello world”。算法
组件并非真实的DOM节点,而是存在于内存之中的一种数据结构,叫作虚拟DOM。只有当它插入文档之后,才会变成真实的DOM。根据React的设计,全部的DOM变更,都先在虚拟的DOM上发生,而后再将实际发生变更的部分,反映在真实DOM上,这种算法叫作 DOM diff,它能够极大提升网页的性能表现。数据结构
可是,有时须要从组件获取真实的DOM节点,这时就要用到ref
属性。dom
var MyComponent = React.createClass({ handleClick(){ this.refs.myTextInput.focus(); }, render(){ return ( <input type="text" ref="myTextInput" /> <input type="button" value="focus the Text input" onClick={this.handleClick} /> ) } }) ReactDOM.render( <MyComponent />, document.getElementById("example") )
上面代码中,组件MyComponent
的子节点有一个文本输入框,用于获取用户输入。这时就必须获取真实的DOM节点,虚拟DOM是拿不到用户输入的。为了作到这一点,文本输入框必须有一个ref
属性,而后this.refs.[refName]
就会返回这个真实的DOM节点。函数
须要注意的是,因为this.refs.[refName]
属性获取的是真实DOM,因此必须等到虚拟DOM插入文档之后,才能使用这个属性,不然会报错。上面代码中,经过为组件指定Click
事件的回调函数,确保了只有等到真实DOM发生Click
事件以后,才会读取this.refs.[refName]
属性。性能
React组件支持不少事件,除了Click
事件之外,还有keyDown
、Copy
、Scroll
等。完整的事件清单请查看官方文档。ui