是否可以在反应流中通过 ID 更新自定义节点的颜色?
Is it possible to update the color of a custom node by ID in react-flow?
正如文档所述,我正在传递自定义节点所需的道具,并使用 nodeId 道具在单击时更改节点的颜色。我当前的工作流程更改了所有节点的颜色,而不仅仅是我单击的节点的颜色。
如何更改我点击的自定义节点的颜色?
我目前的工作流程如下。
const [customNodeStyles, setNodeStyles] = useState({
background: 'black',
padding: 10,
borderRadius: 50,
width: 10,
height: 10
});
const onElementClick = (event, element) => {
setNodeBg('red');
setNodeId(element.id);
}
useEffect(() => {
setNodeStyles({ ...customNodeStyles, background: nodeBg });
}, [nodeId, nodeBg]);
return (
<div style={{ height: 1000, width: 1000 }}>
<ReactFlow
elements={elements}
nodeTypes={{ special: CustomNodeComponent }}
nodeTypesId={nodeId}
onElementClick={onElementClick}
defaultZoom={1.5}
minZoom={0.2}
maxZoom={4}>
</ReactFlow>
</div>
);
将 nodeId 传入 nodeTypesId 将 re-render 所有节点的样式。
您需要做的是更改点击时背景颜色的状态。我建议为你的 Circle Node 创建一个 React Element(它将包含一个 div 和一个带有所有必要 css 字段的样式元素),它在渲染时获取一个对象并设置 backgroundColor。
正如文档所述,我正在传递自定义节点所需的道具,并使用 nodeId 道具在单击时更改节点的颜色。我当前的工作流程更改了所有节点的颜色,而不仅仅是我单击的节点的颜色。
如何更改我点击的自定义节点的颜色?
我目前的工作流程如下。
const [customNodeStyles, setNodeStyles] = useState({
background: 'black',
padding: 10,
borderRadius: 50,
width: 10,
height: 10
});
const onElementClick = (event, element) => {
setNodeBg('red');
setNodeId(element.id);
}
useEffect(() => {
setNodeStyles({ ...customNodeStyles, background: nodeBg });
}, [nodeId, nodeBg]);
return (
<div style={{ height: 1000, width: 1000 }}>
<ReactFlow
elements={elements}
nodeTypes={{ special: CustomNodeComponent }}
nodeTypesId={nodeId}
onElementClick={onElementClick}
defaultZoom={1.5}
minZoom={0.2}
maxZoom={4}>
</ReactFlow>
</div>
);
将 nodeId 传入 nodeTypesId 将 re-render 所有节点的样式。
您需要做的是更改点击时背景颜色的状态。我建议为你的 Circle Node 创建一个 React Element(它将包含一个 div 和一个带有所有必要 css 字段的样式元素),它在渲染时获取一个对象并设置 backgroundColor。