Ich lerne ReactJS und Redux, und ich kann nicht herausfinden, wie Zugriff auf meine TextField-Instanz erhalten, während Bindung onChange Rückruf an this
binden.Wie kann man einen Callback mit ReactJS, Redux und ES2015 korrekt an 'this' binden?
(Ich bin material-ui für dieses Beispiel, aber ich würde ohne sie ganz das gleiche Problem auftritt)
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);
Ich verwende eine Lösung, die finde ich hässlich (nicht wiederverwendbar => nicht sehr ' Komponente freundlich ') durch ein id
auf meinem TextField- Einstellung und den Zugriff auf seinen Wert mit document.getElementById('myField').value
Wie könnte ich diese id
loszuwerden, und es mit so etwas wie textFieldRef.value
in meinem Rückruf zugreifen?
Ich habe versucht, ohne .bind(this)
, die mir durch this
Zugriff auf meine Textfield-Instanz gibt, aber ich kann meine zugreifen this.props.setDataValue()
Funktion nicht mehr da this
nicht auf meinen Klassenkontext binded wird.
Vielen Dank!
Vielen Dank für Ihre schnelle Antwort! Das war's, das Event, wie konnte ich das verpassen? Ich bin mir sehr bewusst, dass die Verwendung von document.getElementById eine sehr schlechte Praxis in React ist, aber ich konnte keine andere Lösung finden, daher meine Frage :) Ich hätte die Material-ui-Dokumentation sorgfältiger lesen sollen, nochmals vielen Dank . –