Size: a a a

React: русскоязычное сообщество

2020 January 09

ВК

Виталий Койструб in React: русскоязычное сообщество
Ребят, вопрос немного не по теме, но может кто сталкивался и сможет подсказать. Задача такая стоит. Сейчас все видео находятся на Vimeo. Скажем 100 видео по 20 в 5 папках. Заказчик кликает получить код и ставляет его в сайт - все просто. Сейчас убираем все моменты с пропускной способность, конвертацией под разное качество и т.п. Заказчик хочет все свои видео хранить на хостинге и использовать какой-нибудь плеер или аналог сервиса на своем хосте. Т.е. создаешь там плеер указываешь ссылку на видео.
Главное, что бы можно было по папкам хранить в сервисе и получать код видео. Кто может подсказать что нибудь?)
источник

v

vasya in React: русскоязычное сообщество
Konstantin
может я не совсем понял сути вопроса. не вариант ли повесить обрботчик на сабмит формы? - <form onSubmit={handleSubmit}> и в хендлере типа такого - const handleSubmit = async (evt: React.FormEvent<HTMLFormElement>) => {
   evt.preventDefault();
   const postData = new FormData(evt.target as HTMLFormElement);
Спасибо большое за совет :-) Ты все правильно понял, но такой подход подходит лишь для случаев, когда поля не контролируемые.
источник

v

vasya in React: русскоязычное сообщество
В итоге сделал так: каждый компонент Input имеет своё собственное состояние (useState), и при смене этого состояния значение записывает в глобальный объект, который никак не влияет на рендеринг.
источник

v

vasya in React: русскоязычное сообщество
Не знаю, по реактовским канонам ли это, но это избавило от перерисовки дерева компонентов и сузило до перерисовки одного единственного, без всяких memo, useMemo, pureComponent и т.д.
источник

v

vasya in React: русскоязычное сообщество
При этом при нажатии на кнопку submit (которая строго говоря является обычной кнопкой type=button) я так же обращаюсь к этому глобальному объекту
источник

v

vasya in React: русскоязычное сообщество
Раньше в качестве такого глобального объекта я использовал состояние.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
vasya
В итоге сделал так: каждый компонент Input имеет своё собственное состояние (useState), и при смене этого состояния значение записывает в глобальный объект, который никак не влияет на рендеринг.
Нет не по канонам. В случае если хочется использовать состояние, которое не влияет на ререндеринг есть возможность использовать useRef({}).current
источник

v

vasya in React: русскоязычное сообщество
Расскажи, пожалуйста, подробнее :-)
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Таким образом реализованы библиотеки, которые самостоятельно контролируют отрисовку элементов.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Этот хук создаёт объект только на первом рендере и гарантирует его референсное тождество на следующих перерисовках.
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
При этом контракт разрабов Facebook с другими разработчиками в том, что использовать следует только поле current, в которое присваивается передаваемый в скобках объект и никогда не переопределять его (мутировать объект можно).
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Остальные свойства получаемого объекта использовать нельзя. Данные ограничения энфорсятся в dev-окружении.
источник

v

vasya in React: русскоязычное сообщество
Дело в том, что для работы с глобальным состоянием я использую useDispatch
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Так что если приложение создано через CRA нарушить их и не получится
источник

v

vasya in React: русскоязычное сообщество
А там используется функция reducer, которая не является хуком
источник

v

vasya in React: русскоязычное сообщество
Поэтому внутри неё я не смогу вызвать useRef
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
По-хорошему твоя проблема решается созданием контекста
источник

v

vasya in React: русскоязычное сообщество
Так и есть, я использую useContext
источник

v

vasya in React: русскоязычное сообщество
Который все равно вызывает re-render вышестоящих компонентов
источник

T

The Fallen Phoenix in React: русскоязычное сообщество
Тебе нужно создать через useRef объект, который будет передан как одно из свойств в value провайдера контекста.
источник