Próbuję nauczyć się, jak zaimplementować formularz odpowiedzi (składnia ES6) i przekazać zdarzenia onChange dla każdego pola do komponentu nadrzędnego kontrolera, który jest odpowiedzialny za aktualizację stanu. Działa to dobrze dla standardowych elementów html, jednak próbuję preinstalowanego Datepicker (https://www.npmjs.com/package/react-bootstrap-date-picker) dla pola daty i nie można łatwo przekazać zdarzenia z powrotem do rodzica w ten sam sposób. Czy istnieje prosty sposób rozwiązania tego problemu?Zdarzenie onChange dla elementu potomnego Reaguj na aktualizację stanu
Controller Komponent
class Parent extends React.Component {
constructor (props) {
super(props);
this.state = {job: ''}
}
setJobState(event) {
var field = event.target.name;
var value = event.target.value;
this.state.job[field] = value;
this.setState({job: this.state.job});
}
render() {
return <Child onChange={this.setJobState.bind(this)} />
}
}
Komponent Dziecko
class Child extends React.Component {
constructor (props) {
super(props);
}
render() {
<form>
<input type="text" name="jobNumber" onChange={this.props.onChange} />
<DatePicker name="dateCmmenced" onChange={this.props.onChange} />
</form>
}
}
Wygląda na to, że jesteś Powiązanie obsługi 'onChange' poprawnie, ale procedura' onChange' dla 'DatePicker' jest wywoływana z dwoma parametrami:' v alue' i 'formattedValue' (zobacz tutaj: https://github.com/pushtell/react-bootstrap-date-picker#datepicker-). W swoim komponencie 'Child' po prostu ustaw różne procedury obsługi dla dwóch zdarzeń' onChange', które są w stanie obsłużyć różnicę w argumentach. – forrert
Dam to spróbować i zobaczę, czy mogę go uruchomić. Dzięki. –
Należy również zachować ostrożność podczas aktualizowania stanu. 'this.state.job [field] = value' nie jest tym, w jaki sposób powinieneś zaktualizować swój stan. Zawsze wprowadzaj zmiany stanu, wywołując 'this.setState'. – forrert