项目结构如下图所示: stage 是来自 KonvaJS 的一个场景;layer 和 rect 也是 conva 对象;控制块只是一个带有按钮的 div。
我不知道如何做到这一点,以便当您单击右侧块中的按钮时,左侧块中矩形的颜色会随着useContext
.
在应用程序中这样做
import React, {useRef, useState} from "react";
import LeftBlockfrom "../LeftBlock/LeftBlock";
import ControlBlock from "../ControlBlock/ControlBlock";
import {StageContext} from "../../context";
import {Layer, Rect, Stage} from "react-konva";
function App() {
const [stage, setStage] = useState(
<Stage width={500} height={500}>
<Layer>
<Rect width={500} height={500} />
</Layer>
</Stage>
);
return (
<StageContext.Provider value={stage}>
<LeftBlock />
<ControlBlock />
</StageContext.Provider>
);
}
export default App;
这是上下文
import {createContext} from 'react';
export const StageContext = createContext(null);
这是左块中的场景本身
const KonvaStage = () => {
const stage = useContext(StageContext);
return (
{stage}
);
};
在这种情况下,控制台写道:Uncaught Error: Objects are not valid as a React child (found: object with keys {Stage}). If you meant to render a collection of children, use an array instead.
我做错了什么以及如何在舞台上设置按钮和矩形之间的交互?
让我解释一下主要逻辑是如何工作的:
const ColorContext = createContext()
ColorContext.Provider
value={{color, setColor}}
const {setColor} = useContext(ColorContext)
。块本身并不关心颜色更新的对象和方式,重要的是它只知道当前颜色,因此它只使用颜色值所在的字段const {color} = useContext(ColorContext)
编码: