Как правильно обновить данные в d3?
Всем привет. Подскажите, пожалуйста, как правильно решить следующую задачу. У меня есть график, по оси y при перерендере приходит точка, по которой я отрисовываю оранжевую горизонтальную линию. Сейчас проблема в следующем при изменении состояния у меня не перерисовывается линия, а как бы запоминается предыдущее состояния и дорисовывается. Если нажать на button3, а затем на button2, данный баг виден. Перерисовка реализуется в компоненте Axis. Буду благодарен вашей помощи.
https://codepen.io/gsdev99/pen/dyoMQmZ Фактически ошибка в этом компоненте: const Axis = ({ scale, orient, transform, width, tickSelected }) => { const ref = useRef(null) const renderAxis = () => { let axis = null if (orient === 'bottom') { axis = d3.axisBottom(scale) } if (orient === 'left') { axis = d3.axisLeft(scale) } d3.select(ref.current).call(axis) } const updateAxis = () => { if (orient === 'left') { if (!tickSelected) { } console.log('tickSelected', tickSelected) const axis = d3 .axisLeft(scale) .tickSize(-width) const g = d3.selectAll(`.${orient}`) .call(axis) g .selectAll('.tick line') .filter((d) => { if (d === tickSelected) { return d === tickSelected } if (d === tickSelected) { return d === tickSelected } return null }) .attr('class', 'is-active') } if (orient === 'bottom') { const axis = d3 .axisBottom(scale) .ticks(2) d3.select(ref.current) .call(axis) } } useEffect(() => { renderAxis() }, []) useEffect(() => { updateAxis() }) return ( <g ref={ref} transform={transform} className={`${orient} axis`} /> ) } |
Часовой пояс GMT +3, время: 04:39. |