【发布时间】:2021-05-10 15:52:54
【问题描述】:
使用 react-chartjs-2 和 chartjs 创建的图表在更改值时刷新 2 次。第一次,只有图形的形状发生变化,第二次,y 轴和 x 轴上的值发生变化。
const Chart = ({country}) => {
const [dailyData,setDailyData] = useState([]);
useEffect(() => {
const fetchAPI = async () => {
setDailyData(await fetchDailyData(country))
}
fetchAPI();
},[country]);
const {day,infected,recoveries,deaths} = dailyData;
const lineChart = (
infected? (<Line
data={{
labels: day.map((data ) => (data)),
datasets:[
{
data: infected.map((data) => (data)),
label: 'Infected',
borderColor: '#3333ff',
fill: true,
}],
}}
/> ) : null
)
【问题讨论】:
-
为什么将 fetchAPI 定义放在 useEffect 中?
-
您可能想尝试将 useEffect 更改为 useLayoutEffect 以防止 React 异步绘制。
-
@AnoopJoshi 将 fetchAPI 放入 useEffect 是一种防止因未将“fetchAPI”放入 useEffect 依赖项而对您大喊大叫的反应。其中,如果您实际上将 fetchAPI 带到外部并将其添加为 useEffect 依赖项,那么您将获得一个无限循环。您必须使用 useCallback 钩子等修复包装 fetchAPI,无论如何,它的做法还不错。
-
@BaltasarSolanilla 我尝试使用 useLayoutEffect,但仍然面临同样的问题。
-
抱歉,对此我无能为力。我建议您使用最小的可重现示例创建一个沙箱,它不是太多代码,应该很容易。也许其他人可以发现问题。