我对 ReactJS 框架真的很陌生。我正在尝试将回调函数从父组件传递给子组件。
我试图传递的是一个回调函数(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)时,会创建子组件。这与传递给子组件的参数 disabled 和 uniqueId 无关。我想说的是,如果我尝试在子节点界面中删除 changeState,则子组件会很好地创建,但是一旦我在界面中引入 changeState 并尝试从父组件传递它,子组件就永远不会显示在DOM。