reactjs - Předat funkci jako vlastnost dětské funkční komponentě
Snažím se předat zpětnou volací funkci dítěti, které je funkční komponentou, aby mohlo aktualizovat rodiče. Vevnitř dítěte dostávám chybu Uncaught TypeError: updateVal is not a function (přidám komentář k řádku, kde k tomu dochází). Máte nějaké nápady, co dělám špatně?
export default class Parent extends React.Component {
constructor(props: any) {
super(props);
this.updateVal = this.updateVal.bind(this);
this.state = {
val: 'A',
};
}
updateVal(newVal: string) {
this.setState({ val: newVal });
}
render() {
return (
<Child
updateVal={this.updateVal}
/>
);
};
}
export function Child(updateVal: any) {
const handleSelectorChange = (event: any) => {
updateVal(event.target.value); // error here: updateVal is not a function
};
return (
<Select onChange={handleSelectorChange} >
<option value="A">A</option>
<option value="B">B</option>
</Select>
);
};
Odpověď č. 1
Props jsou předávány funkčním komponentám jako objekt, nikoli jako jednotlivé argumenty. Stručně řečeno, při daném JSX:
<Child
foo={fooValue}
bar={barValue}
/>
můžete očekávat, že dítě obdrží objekt, který v jeho props drží { foo: fooValue, bar: barValue }.
Prvním argumentem vaší funkční komponenty je ten objekt. Požadovanou hodnotu z něj můžete získat přímo:
export function Child(props) {
const updateVal = props.updateVal;
// ...
}
nebo jeho zničením:
export function Child({ updateVal }) {
// ...
}
Odpověď č. 2
Problém je v Child(updateVal: any). Je potřeba to aktualizovat na: Child({updateVal}: any)
