【发布时间】:2020-12-29 01:02:27
【问题描述】:
我有一个包装器组件,它根据自己的状态 (isDeleted) 有条件地呈现它的子组件。基本上我有一个“可删除项目”组件,如果单击按钮删除,项目本身将从 DOM 中删除(通过返回一个空的 ReactNode,即 >)。问题是,我不知道如何将显示为包装器子级的按钮单击事件传递到被包装组件本身:
export default function App() {
return (
<DeleteableItemComponent>
{/* lots of other markup here */}
<button onClick={triggerFunctionInsideDeletableItemComponent}>
</DeleteableItemComponent>
)
}
以及我的可删除项目组件的最基本版本:
export default function DeleteableItemComponent() {
const [isDeleted, setIsDeleted] = useState(false);
const functionIWantToFire = () => {
// call API here to delete the item serverside; when successful, 'delete' on frontend
setIsDeleted(true)
}
if (isDeleted) {
return <></>
}
return <>{children}</>
}
所以很简单,我只想从按钮onClick 回调中调用functionIWantToFire。
如何通过钩子正确地做到这一点?我曾考虑过使用上下文 API,但我从未见过它用于触发函数触发,仅用于设置值,在这种情况下,我想触发事件本身,而不是将特定值传达给包装器组件。我也不能通过仅仅传递一个布尔属性来正确地做到这一点,因为那时我只能设置一次,即从false 到true。
【问题讨论】:
标签: reactjs react-hooks react-functional-component higher-order-components