Я действительно новичок в ReactJS Framework.
Я пытаюсь передать функцию обратного вызова от родительского к дочернему компоненту.
Я пытаюсь передать функцию обратного вызова (changeState) дочернему компоненту. Дочерний компонент - это кнопка fabric-ui, и эта функция будет вызываться при нажатии на кнопку.
Родительский код: только необходимый код
public constructor(props: {}) {
super(props);
this.state = {
columns: [],
hasError:false,
sortedItems: []
};
this.changeState = this.changeState.bind(this);
}
public changeState = (itemId:React.ReactText)=>{
const resolvedKey='Status';
const idKey='Status';
const item = this.state.sortedItems!.filter(ite => ite[idKey] === itemId)[0];
item[resolvedKey] = 'Résolu';
}
<ResolveButton disabled={isResolved} uniqueId={fieldContent} changeState={this.changeState } />
Код ребенка
import { PrimaryButton } from 'office-ui-fabric-react/lib/Button';
import * as React from 'react';
export interface IHandleChange {
changeState: (itemId:React.ReactText)=>void;
disabled:boolean;
uniqueId:string| number;
}
export class ResolveButton extends React.Component<IHandleChange, {}> {
constructor(props:any) {
super(props);
}
public handleClick = () => {
this.props.changeState(this.props.uniqueId);
alert(`Item ${this.props.uniqueId}`);
}
public render(): JSX.Element {
return (
<div>
{
!this.props.disabled &&
<PrimaryButton
data-automation-id="test"
text="Résolu"
onClick={this.handleClick}
allowDisabledFocus={true}
/>
}
</div>
);
}
}
export default ResolveButton;
Проблема в том, что дочерний компонент даже не создается, когда я выполняю приведенный выше код. Однако дочерний компонент создается, когда я не передаю функцию обратного вызова (changestate).
Это не имеет ничего общего с отключенными параметрами и уникальным идентификатором, передаваемым дочерним компонентам. я пытаюсь сказать, что если я пытаюсь удалить changeState в интерфейсе дочернего узла, дочерний компонент хорошо создан, однако, как только я ввожу changeState в интерфейс и пытаюсь передать его из родительского компонента, дочерний элемент никогда не отображается в ДОМ.