Задать вопрос
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>
    )
})
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 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?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽