我想这样做,所以当我单击div时,它将在控制台中注销“ asdf”,但是我不确定这是否是作为props传递的方法的工作方式...
export class App extends Component {
render() {
func = (param) => {
console.log(param);
}
return (
<Card function={this.func} />
)
}
}
export class Card extends Component {
render() {
return(
<div onClick={this.props.function("asdf")}> this is a div </div>
)
}
}
答案 0 :(得分:2)
您的想法很好,但是该特定实现有两个问题:
function
是JavaScript中的关键字,因此请勿将其用作标识符。onClick={foo(bar)}
的意思是“在渲染时调用foo(bar)
,然后使该调用的结果成为点击处理程序。您可能想要onClick={() => foo(bar)}
,这意味着“在调用时调用foo(bar)元素被点击”。答案 1 :(得分:0)
向Joseph提出了类似的建议,但也请注意,您想将函数拉到render()
方法之外。如下所示:
export class App extends Component {
printParam = param => {
console.log(param);
};
render() {
return <Card printParam={this.printParam} />;
}
}
export class Card extends Component {
render() {
return (
<button
onClick={() => {
this.props.printParam('asdf');
}}>
Click Me
</button>
);
}
}
答案 2 :(得分:0)
func
)放入类范围,并将其从render()
中删除。我之所以说要从render()
方法中删除是因为当调用this.func
时,它是指this
指向类的属性和方法。由于将不会在类的全局范围内定义func
属性或方法,因此它将返回undefined
function
,因为函数可以像Joseph在回答中所说的那样在javascript中指示本机函数关键字。您的代码可以更新为这种方式:
export class App extends Component {
func = param => {
console.log(param);
};
render() {
return <Card myFunction={this.func} />;
}
}
export class Card extends Component {
render() {
return (
<div onClick={() => this.props.myFunction('asdf')}>
{' '}
this is a div{' '}
</div>
);
}
}