【发布时间】:2022-01-18 17:25:49
【问题描述】:
我需要从父组件中的自定义子组件调用方法。
但不幸的是,子组件(称为 CanvasUI)的引用始终为空。我不明白为什么在我看来我已经正确地实现了一切。
这是我的父组件
...
export default function Home() {
...
const canvas = useRef<CanvasRef>(null);
...
function clearCanvas() {
// canvas.current.resetCanvas();
console.log(canvas.current);
}
return (
<div className="flex justify-center items-center min-h-screen min-w-screen bg-main">
<div className="flex flex-col">
...
<div className="flex justify-center">
...
<CanvasUI disabled={disableCanvas} word={activeWord} ref={canvas} />
...
</div>
...
<button onClick={() => clearCanvas()}>clear canvas</button>
</div>
</div>
);
}
这是 CanvasUI 组件
...
export default function CanvasUI({
disabled,
word,
ref,
}: {
disabled: boolean;
word: string;
ref: Ref<CanvasRef>;
}) {
...
useImperativeHandle(ref, () => ({ getCanvas, loadCanvas, resetCanvas }));
...
function resetCanvas(): void {
...
}
...
function getCanvas(): String {
...
}
function loadCanvas(data: String, immediate: Boolean): void {
...
}
return (
...
);
}
CanvasRef 接口
export default interface CanvasRef {
getCanvas: () => String;
loadCanvas: (data: String, immediate: Boolean) => void;
resetCanvas: () => void;
}
我省略了不重要的代码以使其更具可读性
【问题讨论】:
标签: javascript reactjs typescript ref use-ref