React Refs添加一个组件的引用
React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。
这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。
这种特性,让我想到了jquery中的$符号。虽然两者有本质的区别的,但起到的作用,好像是一样的。
使用方法
绑定一个 ref 属性到 render 的返回值上:
<input ref="myInput" />
在其它代码中,通过 this.refs 获取支撑实例:
var input = this.refs.myInput; var inputValue = input.value; var inputRect = input.getBoundingClientRect();
下面是一个具体的例子:
import React, { Component } from 'react'; class LikeButton extends Component { constructor(props) { super(props); // 设置 initial state this.state = { liked: { liked: false } }; // ES6 类中函数必须手动绑定 this.handleClick = this.handleClick.bind(this); } componentWillMount() { console.log('Component WILL MOUNT!在渲染前调用,在客户端也在服务端') } componentDidMount() { console.log('Component DID MOUNT!在第一次渲染后调用,只在客户端') } componentWillReceiveProps(newProps) { console.log('Component WILL RECEIVE PROPS!在组件接收到一个新的prop时被调用') } shouldComponentUpdate(newProps, newState) { console.log("shouldComponentUpdate返回一个布尔值。在组件接收到新的props或者state时被调用"); return true; } componentWillUpdate(nextProps, nextState) { console.log('Component WILL UPDATE!在组件接收到新的props或者state但还没有render时被调用'); } componentDidUpdate(prevProps, prevState) { console.log('Component DID UPDATE在组件完成更新后立即调用!') } componentWillUnmount() { console.log('Component WILL UNMOUNT在组件从 DOM 中移除的时候立刻被调用!') } handleClick(event) { this.setState({ liked: !this.state.liked }); this.refs.myInput.value = "哈哈,好用了!"; // this.state = { liked: !this.state.liked }; } render() { let text = this.state.liked ? '喜欢' : '不喜欢'; return ( < div > < input type = "text" ref = "myInput" / > < button onClick = { this.handleClick } > { text } < /button></div > ); } } export default LikeButton