【发布时间】:2021-10-18 12:49:30
【问题描述】:
我已经构建了一个 React 组件,它有两个子组件:一个显示图表 (vis.js),当用户将鼠标悬停在图表中的某个节点上时,主组件会通过状态更改来了解这一点。唯一使用此状态的子元素是 div(图表的兄弟)。
但是,当状态发生变化时,所有子节点(包括图形)都会重新渲染。我不想每次将鼠标悬停在一个节点上时都渲染图形,只是它的兄弟节点。
这是我的代码:
import React, { useState } from "react";
...
const Graph = (props) => {
...
const [nodeName, setNodeName] = useState("");
function handleHoverEvent(node) {
if (nodeName !== node) {
setNodeName(node);
}
}
function makeNodes() {
...
}
function makeEdges() {
...
}
return (
<div>
<Vis
nodes={makeNodes()}
edges={makeEdges()}
OnHover={handleHoverEvent}
/>
<NameDisplay name={nodeName} />
</div>
);
}
...
export default Graph;
makeNodes() 和 makeEdges() 不以任何方式依赖于状态。
如何防止图表每次都重新渲染?我需要做的就是将数据从一个孩子“铲”到另一个孩子,同时只更新其中一个。
【问题讨论】:
-
你试过 useMemo() 吗?
-
你可以
memoVis组件。
标签: javascript reactjs use-state vis.js