Ich baue eine App in Reaktion und eine Facette davon beinhaltet die Aufzeichnung der Aktivität aus einem Textfeld und Anzeige in Echtzeit an einem anderen Ort in der App. Ich habe den Textbereich an ein onChange-Ereignis gebunden und der onChange wird ausgelöst, aber das Problem, das ich habe, ist, dass die onChange-Funktion die Eingaben einen Tastendruck zu spät aufzeichnet. Zum Beispiel, wenn ich "Hallo" in den Textbereich eintippte, würde der OnChange Listener "Hell" aufzeichnen und ausgeben.Textarea onchange feuern spät in ReactJS
Der Code ist unten. danke für Ihre Hilfe!
Der Komponentencode:
export default class StepTwo extends React.Component {
constructor(props) {
super(props);
this.state={
headlineText: '',
}
this.writeHeadlineChild = this.writeHeadlineChild.bind(this);
}
updateHeadlineValue(evt) {
this.setState({
headlineText: evt.target.value
})
}
writeHeadlineChild(e) {
e.preventDefault();
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
this.props.headWriter(this.state.headlineText, this.state.headlineFont);
}
render() {
return (
<
form className = "card-form"
onChange = {
(e) => {
this.writeHeadlineChild(e)
}
} >
<
div className = "form-group"
onChange = {
evt => this.updateHeadlineValue(evt)
} >
<
label htmlFor = "headline"
className = "form-label" > Your message < /label> <
textarea className = "form-control"
id = "headline" > < /textarea> <
/div> <
/form>
<
/div>
)
}
}
Und die Funktion in der übergeordneten Komponente:
writeHeadline(t, f) {
var headline = document.querySelector('.headline');
function headlinePreview() {
headline.innerHTML = t;
headline.style.fontFamily = f;
}
headlinePreview();
}
Was passiert, wenn Sie onchange durch onkeyup ersetzen? –
Verwenden Sie die Option onkeyup oder onkeydown abhängig von der Uhrzeit, zu der Sie die Änderung erfassen möchten. – jackotonye
Danke für die Hilfe, alle. Es stellte sich heraus, dass das Problem auf die Art und Weise zurückzuführen war, wie ich den Staat übergab. Die Information aus dem Textfeld wurde als "schwebender Statuswert" gehalten und passierte nicht zum richtigen Zeitpunkt. Es gibt eine gute Erklärung dafür [in diesem Beitrag] (https://stackoverflow.com/questions/28773839/react-form-onchange-setstate-one-step-behind#28774088) – toofarm