Мне нужна ссылка на переменную, чтобы я мог изменить значение этой переменной как в Canvas
, так и в ToolsMenu
. Поэтому я сделал нечто подобное ...
function App() {
const canvas = useRef(); // Value assigned in <Canvas />
return (
<>
<Canvas canvas={canvas} />
<ToolsMenu canvas={canvas} />
</>
);
}
Но когда я изменяю значение canvas.current
в <ToolsMenu />
, значение в <Canvas />
не обновляется. Есть ли способ получить что-то вроде указателя C ++ в React?
Я не думаю, что ловушка useState
сработает, потому что я изменяю значение canvas
с помощью методов (canvas.getCommandStack().undo()
), а не setCanvas
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>
</>
);
}
Или все равно будет работать?