我在學習ReactJS和Redux,我無法弄清楚如何在綁定它的onChange回調到this
時訪問我的TextField實例。如何使用ReactJS,Redux和ES2015將onChange回調正確綁定到'this'?
(我使用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);
我使用的是一個解決方案,我覺得醜(不能重複使用=>不是很'組件友好')通過我的文本字段設置的id
,並訪問與document.getElementById('myField').value
值我怎麼能擺脫這種id
的,並且用類似textFieldRef.value
我的回調裏面訪問它?
我嘗試沒有.bind(this)
,這給了我通過this
訪問我的TextField實例,但我不能再訪問我的this.props.setDataValue()
功能,因爲this
不綁定到我的課堂情境。
謝謝!
謝謝你的快速答案!就是這樣,這個事件,我怎麼會想念那個? 我非常瞭解使用document.getElementById在React中是一個非常糟糕的練習,但我找不到另一個解決方案,因此我的問題:) 我應該更仔細地閱讀material-ui文檔,再次感謝您。 –