我在子组件中将按钮onClick设置为参数,并在父组件中拖动和使用onClick。
子构件Room。
type Props = {
items?: [];
onClick?: any;
}
const Room = ({ onClick, items: [] }: Props) => {
return (
<div>
{items.length ? (
<>
{items.map((item: any, index: number) => {
return (
<>
<button key={index} onClick={() => { console.log('hi'); onClick }}>{item.name}</button>
</>
)
}
</>
)
</div>
)
}
这是父组件。
const LoadingRoom = () => {
const handleWaitingRoomMove = (e: any) => {
e.preventDefault();
console.log('Hello Move')
}
return (
<>
<Room
items={[
{
name: "Waiting Room",
onClick: {handleWaitingRoomMove}
},
{
name: "Host Room",
},
]}
>
</Room>
</>
)
}
我想调用父组件的onClick handleWaitingRoomMove,但未调用。
但是,每当单击按钮时,按钮上的console.log('hi')通常会被调用。只有按钮没有被调用。您知道为什么吗?
3条答案
按热度按时间piztneat1#
onlick是子元素的属性。因此将它移到items数组之外
在子代中,
onClick
缺少()
Demo
afdcj2ne2#
您传递的是单击物品,而不是直接传递 prop
因此您组件将是
gz5pxeao3#
如果有一个处理程序来完成这项工作,并使用它来按类型标识每个房间(使用数据属性来标识房间),这可能会更有利。这样,您可以保持数据和组件逻辑彼此分离。如果您需要在稍后阶段添加其他函数,您可以这样做。