繁体   English   中英

useRef 反应钩子

[英]useRef React Hook

我需要引用一个变量,以便我可以在CanvasToolsMenu中更改该变量的值。 因此我做了类似的东西......

function App() {
  const canvas = useRef(); // Value assigned in <Canvas />

  return (
    <>
      <Canvas canvas={canvas} />
      <ToolsMenu canvas={canvas} />
    </>
  );
}

但是当我更改<ToolsMenu />中的canvas.current值时, <Canvas />中的值不会更新。 有什么方法可以让我在 React 中获得类似 C++ 指针的东西?

我不认为useState挂钩会起作用,因为我通过方法( canvas.getCommandStack().undo() )而不是通过setCanvas canvas

function App() {
  const [canvas, setCanvas] = useState(); // Assign in <Canvas />

  return (
    <>
      <Canvas canvas={canvas} setCanvas={setCanvas}/>
      <ToolsMenu canvas={canvas}/>
    </>
  );
}

function Canvas({ canvas, setCanvas }) {
  useEffect(() => {
    setCanvas(new draw2d.Canvas("canvas"));
  }, []);

  // ...

  return <div id="canvas"></div>;
}

function ToolsMenu({ canvas }) {
  const undo = () => canvas?.getCommandStack().undo();
  const redo = () => canvas?.getCommandStack().redo();

  return (
    <>
      <button onClick={undo}>Undo</button>
      <button onClick={redo}>Redo</button>
    </>
  );
}

还是它仍然有效?

我自己解决了这个问题。 它与useRef挂钩无关。

我只是忘记了<Canvas />内部useEffect挂钩中的, [] ,它正在初始化canvas.current 所以我在改变它的值后不断地重新初始化canvas

你不能这样做吗?

function App() {
    const [ref, setRef] = usestate();

    return (
    <>
        <Comp1 value={ref} onChange={setRef(value)}/>
        <Comp2 value={ref} onChange={setRef(value)}/>
    </>
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM