【发布时间】:2016-05-03 18:05:01
【问题描述】:
我正在学习 ReactJS 和 Redux,但我不知道如何在将 onChange 回调绑定到 this 时访问我的 TextField 实例。
(我在这个例子中使用material-ui,但如果没有它我会遇到完全相同的问题)
import React, {Component} from 'react';
import { connect } from 'react-redux';
import { setDataValue } from './actions/data';
import TextField from 'material-ui/lib/text-field';
import Paper from 'material-ui/lib/paper';
export class DataInput extends Component {
constructor(props){
super(props);
}
handleTextChange() {
this.props.setDataValue(document.getElementById('myField').value);
}
render(){
return (
<Paper style={{
width: '300px',
margin: '10px',
padding: '10px'
}}>
<TextField
id='myField'
defaultValue={this.props.data.value}
onChange={this.handleTextChange.bind(this)} />
</Paper>
);
}
}
export default connect(
(state) => ({data: state.data}),
{setDataValue}
)(DataInput);
通过在我的 TextField 上设置 id 并使用 document.getElementById('myField').value 访问它的值,我使用了一个我觉得丑陋的解决方案(不可重复使用 => 不是非常“组件友好”)
我怎样才能摆脱这个id,并在我的回调中使用textFieldRef.value 之类的东西来访问它?
我尝试不使用.bind(this),这使我可以通过this 访问我的TextField 实例,但我无法再访问我的this.props.setDataValue() 函数,因为this 没有绑定到我的类上下文。
谢谢!
【问题讨论】:
标签: javascript reactjs bind ecmascript-6 redux