Задать вопрос
ZamarShoo
@ZamarShoo
React/Vue, Node/PHP, Wordpress/Drupal

Почему бесконечно перерисовывается и как сделать правильно?

(React Hooks)
График рисуется через данные, которые лежат в редаксе, если я удаляю элемент в этих данных через экшн то начинается бесконечная перерисовка, в чем проблема?

const Chart = React.memo((props) => {
    const [data, setData] = useState(props.items.map((elem) => {
        return elem.weight
    }))
    const svgRef = useRef()

    useEffect(() => {

        setData(props.items.map((elem) => {
            return elem.weight
        }))
        const svg = select(svgRef.current)

        const xScale = scaleLinear()
            .domain([0, data.length - 1])
            .range([0, 1240])

        const yScale = scaleLinear()
            .domain([min(data), max(data)])
            .range([280, 0])
        const myLine = line()
            .x((value, index) => xScale(index))
            .y(value => yScale(value))
            .curve(curveCardinal)
        svg
            .selectAll('path')
            .data([data])
            .join('path')
            .attr('d', value => myLine(value))
            .attr('fill', 'none')
            .attr('stroke', 'lavender')
            .attr('stroke-width', '3px')
            .attr('width', '100%')
    }, [data, props.items])

    return (
        <div className={s.elem}>
            <svg viewBox={'0 -9 1240 300'}
                ref={svgRef}></svg>
        </div>
    )
})
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
hzzzzl
@hzzzzl
useEffect(() => {

        setData(props.items.map((elem) => {   // setData
            return elem.weight
        }))

      } , [data, props.items] })    // data?


вот тут эффект слушает изменения data, и ты в нем же меняешь data, тем самым его перезапуская..
и зачем вообще хранить data в стейте, вместо того чтобы напрямую использовать props.items из стора?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ZamarShoo
@ZamarShoo Автор вопроса
React/Vue, Node/PHP, Wordpress/Drupal
Я неправильно выразился: Я пробовал и вытаскивать setData и убирать (что мне казалось с самого начала логично), ибо следит за изменениями props.items, но вот если пропс изменяется, то как перезаписать data?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 янв. 2025, в 07:20
50000 руб./за проект
18 янв. 2025, в 03:12
1000 руб./за проект
18 янв. 2025, в 00:01
500 руб./за проект