Size: a a a

2021 April 26

MK

Max Kovalenko in React Kyiv
Дамы и господа. Помогите пожалуйста утолить любопытство. в react-boilerplate заметил как с редаксом для использования стора как и для саг используется техника HOC через injectReducer/injectSaga. Кто-то знает почему используется такой подход? Мне он не знаком и выглядит жутким оверхедом и хочу его выкинуть у себя на проекте. Кто-то может поделиться опытом использования такого подхода и рассказать о плюсах и минусах?
источник

MK

Max Kovalenko in React Kyiv
в гугл просьба не отправлять
источник

AR

Alexey Raspopov in React Kyiv
Моё предположение: древний код или кто-то очень opinionated. И в том и в другом случае советовал бы выбросить это говно 🤷‍♂️
источник

MK

Max Kovalenko in React Kyiv
код древний ))) но интересно просто какой в этом смысл 🙂 и есть ли он там вообще )
источник

MK

Max Kovalenko in React Kyiv
есть просто подозрение что все редьюсеры не монтируются сразу и соответственно в памяти хранится меньше данных (в сторе редакса).... но чето мне кажется что я либо неправ, либо в этом нет смысла
источник
2021 April 27

PK

Pasha Kozyr in React Kyiv
увидел у разработчика в package.json такое:
"devDependencies": {
   "eslint-config-airbnb": "^18.2.0",
   "eslint-plugin-import": "^2.22.0",
   "eslint-plugin-jsx-a11y": "^6.3.1",
   "eslint-plugin-react": "^7.20.6",
   "eslint-plugin-react-hooks": "^4.1.0"
 }

я так понимаю он это все вручную устанавливал?
источник

W

Whatislove in React Kyiv
А как ещё?)

Это конфиг airbnb, у них вроде в npm есть снипет для установки всего
источник

YO

Yevhenii Oliinyk in React Kyiv
источник

S

Stepan Kudelya in React Kyiv
Спасибо!!
источник

MK

Max Kovalenko in React Kyiv
в любом случае спасибо за рекомендацию 🙂
источник

ИР

Илья Раецкий... in React Kyiv
Ребят, такой вопрос, может кто сталкивался

У меня есть Реакт-компонент, который я хочу протестировать. В самом файле компонента  перед самим компонентом в той же области видимости я создаю инстанс сервиса с набором API-вызовов, которые ему нужны (простой набор методов каждый из которых возвращает промис). Вызов  
new Service()
присваиваю переменной, и потом внутри компонента, где нужно, дергаю методы. В одном из тест-кейсов я хочу сделать мок одного из методов сервиса и подменить ответ сервера один раз только в этом тест-кейсе,  
service.method = jest.fn().mockResolvedValueOnce(response)
и, конечно, предварительно в начале файла теста делаю  
jest.mock('путь к сервису')
.  Проблема в том, что если сервис объявлен в той же области видимости, что и компонент, то во время теста я получаю
-> Cannot read property then of undefined
но если я перенесу создание инстанса внутрь компонента все работает и метод мокается правильно. Подскажите почему так и как можно сделать тоже самое без переноса создания инстанса сервиса внутрь компонента?

Пользуюсь jest + react-testing-library
источник

AB

Alex Bausk in React Kyiv
Привет, вопрос про react-virtualized и управление стейтом

https://codesandbox.io/s/react-virtualized-expandable-row-forked-9pu6l?file=/src/Component.js:924-935

Делаю разворачиваемые ряды таблицы. Для этого использую кастомный rowRenderer.
Состояние — индекс развернутого ряда selectedIndex — используется в rowRenderer через замыкание, см. ссылку.
setSelectedIndex вызывается из <Detail> компонента ячейки, который напрямую с rowRenderer не связан, т.е. между ними нельзя явно перебрасывать props.

Вопрос: использование selectedIndex через замыкание меня беспокоит (например, нельзя выделить rowRenderer в отдельный компонент), хочу посоветоваться, как сделать лучше.
Есть три варианта:
1) Состояние isSelected изолировать в rowRenderer (его ОК сделать отдельно на каждый ряд, т.е. чтобы разворачивалось несколько). В rowRenderer->props есть columns, в числе которых есть <Detail>. Сделать cloneElement и добавить проп setSelected.
2) Создать контекст выше в дереве, держать isSelected в контексте.
3) Ничего не трогать, rowRenderer не выделять в отдельный компонент.
4) Ваш вариант.
Спасибо, если есть любые комментарии пишите плиз
источник

K

Kontsedal in React Kyiv
не совсем понятно зачем делать new Service, еще и вне компонента. Так как это функции доступа к апи, я так понимаю что там состояния нет и этот сервис можно и нужно разбить на отдельные функции и импортить их отдельно, тогда и боль с моками пройдет
источник

AR

Alexey Raspopov in React Kyiv
Вместо класса про используй функции, которые написаны в отдельном модуле, потом в тестах этот модуль мокай через jest.mock()
источник

ИР

Илья Раецкий... in React Kyiv
Да это я знаю, так и делаю обычно
Проблема в том что есть очень большая кодовая база где уже так сделано
И как в этом случае выкрутиться?
источник

ИР

Илья Раецкий... in React Kyiv
Ещё можно тот же сервис просто в пропсы пробрасывать или в стейт бросить (хоть это и не стейт)

Вопрос в том как существующий код покрыть
источник

MK

Max Kovalenko in React Kyiv
@alexeyraspopov  привет! помнишь я спрашивл по поводу injectReducer и вот этой вот штуки. В общем это сделано для код сплиттинга
источник

AR

Alexey Raspopov in React Kyiv
Лучшая вещь для код сплиттинга это не использовать редакс
источник

MK

Max Kovalenko in React Kyiv
эммм а почему?))
источник

P(

Philip (ノ°益°)ノ... in React Kyiv
Хело, шо ща модно использовать с реактом? Аполо на графкуель и редакс с рестом? Мобх еще не сдох?
источник