我正在尝试制作一个可重用的ReactJS按钮组件,并需要有关如何使用的帮助 将函数传递给组件,然后将其用作单击事件。按钮上的单击事件无效。
以下是调用组件的代码:
export var MyPublicFunction = function (inArg: number) {
alert(inArg);
}
ReactDOM.render(<MyButton name="My Button" clickFunction={MyPublicFunction(1)} >Button</MyButton>, document.getElementById('content'));
这是我试图写的组件:
interface myProps {
name: string;
clickFunction: any
}
class MyButton extends React.Component<myProps, {}> {
constructor(props: myProps) {
super(props);
}
render() {
return (<div>
<button ref="btn1" onClick={this.props.clickFunction} >
{this.props.name}
</button>
</div>);
} //end render.
} //end class.
答案 0 :(得分:5)
<MyButton name="My Button" clickFunction={MyPublicFunction(1)} >
在评估包含表达式时,会立即调用表达式MyPublicFunction(1)
。你想要的是向clickFunction
提供功能:
<MyButton name="My Button" clickFunction={() => MyPublicFunction(1)} >
请注意,如果你写了类似的东西,你会得到一个类型错误:
interface myProps {
name: string;
clickFunction: () => void;
}
答案 1 :(得分:1)
这种方法对我有用:
父母:
class App extends React.Component<Props, State> {
greet() {
alert('Hello!')
}
render() {
return (
<div className="col-xs-10 col-xs-offset-1">
<Home greet={this.greet}/>
</div>
)
}
}
孩子:
interface Props {
greet: () => void
}
export class Home extends React.Component<Props, State> {
constructor(props: any) {
super(props)
}
render() {
return (
<button className="btn btn-warn" onClick={this.props.greet}>Greet</button>
)
}
}