【发布时间】:2018-05-23 20:18:47
【问题描述】:
我有两个使用ref callback attribute 的示例。第一个 on 引用了回调函数。第二个有一个箭头函数声明为值。
第一个按预期工作。但是,第二个在连续渲染中记录 null。
这是什么原因?
开始在输入框内输入
示例 1(效果很好)
class App extends React.Component{
constructor(props){
super(props)
this.refCallback = this.refCallback.bind(this)
this.state = {}
}
refCallback(el){
console.log(el)
}
render(){
return <input type="text"
value={this.state.value}
ref={this.refCallback}
onChange={(e) => this.setState({value: e.target.value})}
/>
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
示例 2(这不起作用)
class App extends React.Component{
constructor(props){
super(props)
this.state = {}
}
render(){
return <input type="text"
value={this.state.value}
ref={(el) => console.log(el)}
onChange={(e) => this.setState({value: e.target.value})}
/>
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
【问题讨论】:
-
<input type="text" value={this.state.value} ref="whatever" onChange={() => this.setState({value: this.refs.whatever.value})} /> -
我知道
ref string会起作用。我需要了解ref callback attribute。 React 将在未来的版本中弃用string ref。 -
<input type="text" value={this.state.value} ref={ref => this.whatever = ref} onChange={() => this.setState({value: this.whatever.input.value})} />
标签: javascript reactjs