Ответы пользователя по тегу React
  • Если props отсутствует Нужно ли использовать memo?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Правильный ответ я уже дал тут: Нужно ли использовать useMemo в hooks?
    Ответ написан
  • Как обрабатывать BigData?

    Robur
    @Robur
    Знаю больше чем это необходимо
    никакой график и уж тем более таблица на экране не вместит миллионы значений. даже больше 100 - редкость. Вам не нужно все это грузить и пытаться вывести разом.

    Чтобы не грузить больше чем надо:
    - фильтрация (например "данные за сегодня" или "вот по этому человеку")
    - пагинация (следующие 50 записей начиная с 123849)
    - аггрегация (средний доход по каждому году за последние 10 лет - получаете 10 записей в ответе)
    - виртуализированные таблицы которые рендерят только то что нужно, а не все 100500 записей которые вы ей скормили (https://github.com/bvaughn/react-virtualized, дальше погуглите)

    Чтобы не тормозило на сервере:
    - правильные индексы
    - по максимуму использовать возможности SQL
    - грамотная организация данных/работы с ними (по возможности)
    Ответ написан
    Комментировать
  • React app, можно ли создать такой компонент?

    Robur
    @Robur
    Знаю больше чем это необходимо
    То что вы делаете - это правильно. передавайте переменную и onChange, в нем меняйте эту переменную, храните все в стейте родителя. Если проблемы с тем чтобы в onChange поменять нужную переменную - это решаемо - это и решайте.
    Так как вы хотите сделать тоже можно, но это будет даже не грабли а весьма плохой код, чтобы не плодить количество говнокода на планете, не буду объяснять как.
    Ответ написан
  • Какие реальные проекты можно делать для практики на React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Поиск по тостеру дубликатов вопросов. Проверить можете на этом вопросе, как найдет 100500 подобных - значит заработал.
    Ответ написан
    Комментировать
  • Как сделать переход между фотографиями в галерее?

    Robur
    @Robur
    Знаю больше чем это необходимо
    модал лучше сделать один отдельно, положите его в галерею, в галерее же храните в стейте id текущего фото которое нужно показывать в модале.
    при клике на фото ставьте этот id в id фото на котором кликнули и показывайте модал, передавайте ему этот id.
    при клике влево-вправо меняйте id на следующий/предыдущий, модал перерисуется с новым id, в модале берите нужный урл из списка с фото
    Ответ написан
    Комментировать
  • React refs и высота элемента ???

    Robur
    @Robur
    Знаю больше чем это необходимо
    console.log(this.windowRef.current.scrollHeight)
    Ответ написан
  • Скорость преобразования данных от API?

    Robur
    @Robur
    Знаю больше чем это необходимо
    это нормально тратить до 3.5ms на подобные операции

    Вы занимаетесь преждевременной оптимизацией (погуглите)
    Ответьте на вопрос какие это проблемы создает в вашем случае - и станет понятно, нормально или нет.
    Я уверен что никаких :) и вряд ли создаст - так что нормально.
    Ответ написан
    Комментировать
  • Как закешировать данные в ReactJS/Redux приложении?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если нужно чтобы после обновлении страницы сохранялось - то localStorage ваш первый кандидат.
    Если объекты всегда/долго одинаковые, то возможно проще закэшировать на уровне HTTP - положите в отдельный урл, поставьте нужные заголовки, и браузер будет сам из своего кэша вам его отдавать, и инвалидировать кэш.
    Ответ написан
    3 комментария
  • Почему typescript выдает ошибку при использовании generic?

    Robur
    @Robur
    Знаю больше чем это необходимо
    <T extends object>
    замените на
    <T extends {name?: string; title?: string} >

    Иначе TS никак не может знать что поле name есть у T - и потому он вам правильно ругается. А вообще как вам уже сказали, дженерики вам с большой вероятностью не нужны. По крайней мере в таком примере - динамически тип передавать не надо, от этого у вас ничего не зависит. Достаточно чтобы просто передаваемый тип приводился к FiltersType
    Ответ написан
    Комментировать
  • В чём разница между глобальным состоянием и состоянием компонента?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Хранить всё в одном глобальном состоянии это одна из хороших практик при использовании Redux в разработке


    Кто вам такое сказал?

    для поддержки и расширения удобно инкапсулировать состояние компонента внутри него.


    Это правда

    ничто не мешает хранить состояние в общем сторе


    Чувствуете разницу между "для поддержки и расширения удобно" и "ничего не мешает"?
    "Ничего не мешает" вам писать как угодно - но какая в этом будет польза?

    ценой за инкапсуляцию мы превращаем компонент в чёрный ящик

    Да. и это хорошо
    Ответ написан
    3 комментария
  • Объектно ориентированное и функциональное программирование в React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно. Любой подход который приводит к чистому и хорошо поддерживаемому коду - хорош. Вариантов как это сделать много, само по себе смешивание ооп и функциональщины к плохому коде не приводит.

    Другой вопрос - зачем вам нужно делать именно так как вы написали. Если у вас есть ответ на него - без проблем.
    Ответ написан
    4 комментария
  • Как собрать приложение на React в минимальное количество файлов для импорта в Dynamics 365?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1. .map файлы вообще не нужны для работы приложения. вы их можете просто не копировать.
    2. Убедитесь что вы делаете production build https://facebook.github.io/create-react-app/docs/p...
    3. уменьшить количество файлов можно, с помощью https://github.com/timarney/react-app-rewired можно поменять конфиг вебпака как вам хочется, или просто сделать eject и поменять конфиг напрямую.

    Про dynamics ничего не знаю, но выглядит так будто у вас проблема не с количеством файлов а в чем-то другом.
    Ответ написан
    5 комментариев
  • Может быть такой компонент компонентом высшего порядка в React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    То что у вас называется просто композиция.
    HOC создает новый компонент каждый раз когда вы его используете на основе того компонента который ему передали.

    HOC выглядел бы так:
    const HocA = makeHOC(A)
    const HocB = makeHOC(B)
    
    //... где-то в рендере:
    <HocA />
    
    //где-то еще
    <HocB />


    В чем разница?
    В том что в вашем случае ваш Hoc не зависит от того что ему передали и использует A как свойство.
    Если вы поменяете A на B то Hoc просто получит новые пропсы и сохранит старый стейт. Вы работаете с инстансом Hoc не меняя его класс (тип)

    Когда вы делаете правильный Hoc - то сначала вы создаете два "типа" компонента один для A (HocA) другой для B (HocB)
    потом рендерите уже их как самостоятельные компоненты ничего дополнительно не передавая.
    Ответ написан
    Комментировать
  • Почему элемент не пропадает?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Реакт не в курсе что вы там еще в dom добавляете.
    Можете дать всему списку ключ и менять этот ключ чтобы вся нода списка удалилась и создалась заново - тогда и левый элемент пропадает.
    Но вообще лучше ничего в обход реакта не добавлять
    Ответ написан
  • Как сделать редактируемое поле в ant-design?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Тут "специальный input" не нужен - все можно сделать самому без проблем.
    Берете Input , по клику на текст скрываете текст и показываете input, при нажатии enter или esc скрываете input и показываете текст.
    Это при желании можно оформить как компонент - будет вам то что вы хотите.
    Ответ написан
    Комментировать
  • Как удалить повторяющиеся товары в корзине, но увеличить их кол-во на React-Redux?

    Robur
    @Robur
    Знаю больше чем это необходимо
    записывайте не просто продукт а продукт + количество

    basket.push({product, count: 1})

    и потом, перед тем как пушить, проверяйте, если там уже такой же продукт, если есть то вместо .push
    пишите увеличивайте count.

    const productInBucket = bucket.find(item => /* проверить что item.product == product так как вам нужно*/)
    if (productInBucket) productInBucket.count++
    else basket.push({product, count: 1})
    Ответ написан
  • React + redux какую структуру стейта выбрать для формы и компонента?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Потому и используются везде разные подходы потому что одного "правильного" нет.
    Пишите так как вам больше нравится, и со временем будете в каждом конкретном случае понимать как сделать лучше.

    Можно как у вас, можно положить стейт в компоненте, поменять флаг с true на false не так уж много логики.
    Ответ написан
    Комментировать
  • Graphql мутация?

    Robur
    @Robur
    Знаю больше чем это необходимо
    addNewTemplate({
        variables: {
           id: 12,
           prices: /* данные для PricesInput */
        }
    })


    в чем проблема то у вас? если в том что не можете понять как работать с мутациями - то прочитайте доку, пройдите туториал, в apollo client очень много, хорошо и подробно все описано.
    на первой же странице о том как работать с мутациями - ваш пример:
    https://www.apollographql.com/docs/react/essential...
    Все поймете.
    Ответ написан
    Комментировать
  • Как запретить переходы на предыдущие страницы в React?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Поставьте редирект, который будет проверять, на каком шаге пользователь был в прошлый раз и отправлять его туда.
    Его можно поставить или на каждую страницу или один глобальный который рендерится выше по дереву чем все эти страницы.
    Ответ написан
  • Лучшее решение повесить обработчик на событие?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Кем "не рекомендуется"?
    Чтобы решать проблему нужно убедиться что есть проблема и четко сформулировать ее.
    Если вы решаете проблему что код не подходит под какие-то рекомендации, то это одно, а если вы решаете проблемы с памятью во время выполнения приложения это совсем другое.
    Во втором случае у вас на руках должны быть данные полученные в результате анализа того как ваше приложение работает.
    Подавляющее большинство render функций вызывается на самом деле достаточно редко чтобы это имело значение.
    Ответ написан
    Комментировать