【发布时间】:2020-09-09 17:56:40
【问题描述】:
我正在尝试在数据发生更改时更新屏幕上的一些内容。我正在使用带有钩子的 React 函数组件。当父元素中的数据更新时,我通过 props 将其发送到PlayerControls:
export const PlayerControls = (props) => {
....
const [heatmaps, setHeatMaps] = React.useState("");
const [data, setData] = React.useState(null);
useEffect(fetchData, [props.videoData]);
useEffect(updateHeatmaps, [data]);
function fetchData () {
d3.csv(require(`./data/${props.videoData}`)).then((d) => setData(d));
}
function updateHeatmaps(){
if (data && data.length) {
const temp = data.map((item, index) => {
return (
<Heatmap size={[400, 50]} data={item} key={index}/>
)
});
setHeatMaps(temp);
}
}
return (
<div>
{heatmaps}
</div>
);
}
问题是,虽然这对初始数据有效,但它不会更新屏幕上的heatmaps。现在,我熟悉setState 钩子是异步的,并且有一些解决方案(例如使用useEffect 钩子更新状态并将状态添加为依赖项),例如this StackOverflow question。问题是我正在使用另一个函数更新状态,我不能在那里或在返回函数中使用useEffect。我真的很感激任何解决方案,这个问题已经拖了我一段时间了,让我想知道这些钩子和函数组件是否是所有用例的解决方案。
【问题讨论】:
标签: reactjs react-hooks