- 使用refs而不是findDOMNode()去获取DOM节点.
- 使用this找到DOM节点
- 以前的做法:
- 使用ref之后的做法
- 使用字符串ref找到DOM节点
- 使用字符串ref的做法
- 使用回调ref的做法
- 调用子组件的ref
- 不使用ref的做法:
- 使用ref的做法
- 使用this找到DOM节点
- 参考资料:
使用refs而不是findDOMNode()去获取DOM节点.
注意:
React实际上也支持使用字符串作为ref, 来访问DOM节点. 但是需要注意的是这是一种已经不被官方推荐的用法.
- 更多关于ref的知识
- 为什么字符串形式的ref已经不被推荐了?
使用this找到DOM节点
以前的做法:
class MyComponent extends Component {componentDidMount() {findDOMNode(this).scrollIntoView();}render() {return <div />}}
使用ref之后的做法
class MyComponent extends Component {componentDidMount() {this.node.scrollIntoView();}render() {return <div ref={node => this.node = node}/>}}
使用字符串ref找到DOM节点
使用字符串ref的做法
class MyComponent extends Component {componentDidMount() {findDOMNode(this.refs.something).scrollIntoView();}render() {return (<div><div ref='something'/></div>)}}
使用回调ref的做法
class MyComponent extends Component {componentDidMount() {this.something.scrollIntoView();}render() {return (<div><div ref={node => this.something = node}/></div>)}}
调用子组件的ref
不使用ref的做法:
class Field extends Component {render() {return <input type='text'/>}}class MyComponent extends Component {componentDidMount() {findDOMNode(this.refs.myInput).focus();}render() {return (<div>Hello,<Field ref='myInput'/></div>)}}
使用ref的做法
class Field extends Component {render() {return (<input type='text' ref={this.props.inputRef}/>)}}class MyComponent extends Component {componentDidMount() {this.inputNode.focus();}render() {return (<div>Hello,<Field inputRef={node => this.inputNode = node}/></div>)}}
参考资料:
- ESLint Rule proposal: warn against using findDOMNode()
- Refs and the DOM
