2 回答

TA貢獻2021條經驗 獲得超8個贊
最好的方法是將滑塊值放入 refs 中,因此更改它們不會重新渲染父級,然后單擊按鈕更新包含當前圖表值的狀態值。像這樣的東西:
import React, { useCallback, useState, useRef } from 'react';
const Parent = () => {
const slider1Value = useRef(0);
const slider2Value = useRef(0);
const setSlider1Value = useCallback((value) => {
slider1Value.current = value;
}, []);
const setSlider2Value = useCallback((value) => {
slider2Value.current = value;
}, []);
const [chartValues, setChartValues] = useState({ chart1: 0, chart2: 0 });
const updateChartValues = useCallback(() => {
setChartValues({
chart1: slider1Value.current,
chart2: slider2Value.current
});
}, []);
return (
<div>
<Chart
value1={chartValues.chart1}
value2={chartValues.chart2}
/>
<Slider onChange={setSlider1Value}/>
<Slider onChange={setSlider2Value}/>
<button onClick={updateChartValues}>Apply</button>
</div>
);
}

TA貢獻1810條經驗 獲得超4個贊
嗯,React.memo 可能是你最好的選擇。像這樣的事情
function RenderChart(slider1Value, slider2Value){
return (
<Chart
value1={slider1Value}
value2={slider2Value}
/>
)
}
function Parent() {
const useState [slider1Value, setSlider1Value] = useState(0);
const useState [slider2Value, setSlider2Value] = useState(0);
const useState [apply, setApply] = useState(0);
const renderedChart = useMemo(() => RenderChart(slider1Value, slider2Value), [apply])
return (
<div>
{renderedChart}
<Slider onChange={setSlider1Value}/>
<Slider onChange={setSlider2Value}/>
<button onClick={()=> setApply(true)}>Apply</button>
<div>
);
}
沒有時間測試,但這對我來說就是這樣的
另一種可能的(hacky)方法是設置一個占位符狀態,僅當您單擊“應用”按鈕時才會填充該狀態。
添加回答
舉報