В соответствии с этим потоком проблема все еще может существовать в этой библиотеке.
Помимо очевидного варианта сокращения кода ...
useEffect(() => {
let ref = chartReference.current.chartInstance;
ref.options.dragData = !props.state;
ref.update();
}, [props.state])
... it Похоже, вам нужно каким-то образом принудительно перерисовать / перерисовать.
Один из вариантов - изменить всю options
пропущенную пропозицию <Line />
. Вы можете использовать useState
, чтобы сохранить этот объект конфигурации - конечно, с перемещением исходного состояния:
const [chartOptions, setChartOptions] = useState(
{
onDragEnd: handleDrag,
dragData: true,
dragDataRound: 0,
...
useEffect
, чтобы реагировать на prop.state
изменения:
useEffect(() => {
setChartOptions(Chart.helpers.configMerge(chartOptions, {
dragData: !props.state
})
);
}, [props.state])
<Line />
диаграмма требует изменений:
<Line
ref={chartReference}
data={data}
height={30}
options={chartOptions}
redraw={true}
/>
рабочий пример
Конечно, вы можете использовать значение props.state
в исходном состоянии ... также подумайте о переименовании state
проп, это может быть по крайней мере ошибочным ... особенно, когда вы преобразуете этот компонент в класс.