Максим
Всем привет! Тестирую компоненты с помощью Enzyme и Jest. Возникла задача: Есть компонент Home, в него вставлен компонент NavTop, и переданы пропсы с методом getFilterItemValue (onFilterItemValue={this.getFilterItemValue}) . Внутри NavTop есть элемент, по клику на который вызывается метод onFilterItemValue из пропсов, который уже в компоненте Home вызывает его метод getFilterItemValue: // Метод компонента Home getFilterItemValue = (itemText, itemId) => { const { filterItemValueAction: handleAction } = this.props; handleAction(itemText, itemId); }; Задача: нужно протестить, чтобы когда мы кликаем на метод getFilterItemValue в дочернем компоненте NavTop и передаём два аргумента (скажем, text, 'id1'), то надо проверить, чтобы метод getFilterItemValue вызывался и вызвался с двумя аргументами, и какими двумя аргументами.
Алексей
Привет всем! Я вот тут тренируюсь и немного запнулся. Подскажите, как правильно оформлять состояния, на примере ячеек таблицы. Вот пример просто на css https://codepen.io/anon/pen/agqVxB наводишь на ячейку, она меняет цвет. Как это правильно повторить в реакте? Я передаю две функции (mouseOver/mouseOut) от родителя к этим ячейкам, но в голову лезет только один вариант реализации функции, просто event.target изменять по факту, без изменений в state, но это же не очень правильно, как я понимаю. handleOnMouseOver = ev => { ev.target.classList.toggle('cell--hover'); } Загвостка у меня в чём, в рендере родителя я не понимаю, как мне отличить элемент на который навели мышкой от остальных элементов и добавить/снять класс только у него. Через state смог только сделать одновременное изменение цвета у всех))) Извините за такое объяснение, надеюсь поймёте.
King
@zarabotaet Кстати, все таки пришлось делать хок, компонент не позволяет вернуться раньше чем мне придется лезть в данные, где пока они грузятся у меня нулл
King
т.е. if(loading) <Loading/> return <MyComponent data={data.items}> or return <Loading loading={loading}> <MyComponent data={data.items}/> </Loading> // Can't access items of null
bogdan
ребят а можете еще подсказку дать , как в блоке then сделать setState
bogdan
bogdan
вот етот вот код не правильно работает
bogdan
мне от сервера приходит новая инфа, а оно не рендерит значит я так понимаю setState ставит прошлое состояние
🦜
>doDone Чот в голос
bogdan
>doDone Чот в голос
ахахах оборжаться
King
получается только так ¯\_(ツ)_/¯
Dmitriy
получается только так ¯\_(ツ)_/¯
Мне как новичку очень сложно было понять HOF и его частный случай HOC
Roman
функ высшего
☕️
|| {} выглядит убого
Dmitriy
|| {} выглядит убого
отвергая предлагай
Дима
const {data = {}} = useQuery(USER) const {current} = data
Дима
const {data} = useQuery(USER) const current = data?.current
☕️
Два чая комментирующему выше
Dmitriy
А аргументы почему так лучше?
☕️
Потому что это выглядит визуально проще Вообще стараюсь оператор или пореже использовать
Дима
а если data null ?
поэтому я предпочту optional chaining
Dmitriy
поэтому я предпочту optional chaining
а если нельзя в проекте этот стейдж?
Дима
ни в каком проекте нельзя использовать стейджи, уже давно
Дима
забудь про это слово вообще
Дима
целесообразность каждого плагина рассматривается отдельно и подключаются они тоже отдельно
Дима
но если у вас в проекте nullable queries, особенно если graphql и техлид лбом упирается в "не хочу" то костылей у вас будет ещё много)
Дима
единственное что сейчас optional chaining под вопросом (no pun) — это вызовы методов с этим синтаксисом и это абсолютно излишняя фигня. чтение обычных nullable полей ни у кого разногласий уже давно не вызывает, а концепция graphql так и подавно изначально рассчитывает на него
Dmitriy
целесообразность каждого плагина рассматривается отдельно и подключаются они тоже отдельно
те мнение не парится от стейдже брать и транспайлить и забывать об этом?
Дима
ну вообще говоря о стейдже париться нужно, просто я поясняю почему именно в этом случае можно использовать не парясь
Dmitriy
С какого стейджа можно в прод тянуть по вашему?
Dmitriy
Лучше всего stage-3 дожидаться как минимум
rovnyart
единственное что сейчас optional chaining под вопросом (no pun) — это вызовы методов с этим синтаксисом и это абсолютно излишняя фигня. чтение обычных nullable полей ни у кого разногласий уже давно не вызывает, а концепция graphql так и подавно изначально рассчитывает на него
меня еще смущает скудность документации и в целом не очень ясная позиция по поводу массивов, понятно, что в жс все объекты, но можно было про массивы отдельно написать, например, у нас прекрасно работают штуки типа const foo = arr?.reduce(...), но это было не очевидно)
Дима
нет, нет, нет, именно про них я и говорю. вызов методов после optional chaining по хорошему надо в отдельный пропосал
rovnyart
хотя если рассматривать массив как инстанс класса Array, то вроде норм)
Dmitriy
a?.() wtf
Dmitriy
Optional chaining в варианте, который категорически нельзя тащить в прод
Dmitriy
Это как раз та причина, почему он всё ещё stage 1
Дима
идея в том, что чтобы безболезненно делать апдейты схемы приложений и чтобы гибко обрабатывать права доступа к ресурсам, в gql все поля по умолчанию nullable, то есть это подразумевает, что приложения учитывают тот факт, что какие-то данные могут им не придти
Дима
это не имеет никакого отношения к вздорной концепции с вызовом методов nullable объектов, речь именно о подходе для чтения полей ответа сервера в котором никаких методов нет и быть не может
Дима
более того, флоу например явно запрещает использовать optional методы именно с такой мотивацией, тс насколько я понимаю должен скоро имплементировать тоже именно обычное чтение полей
Dmitriy
Сухой вывод: если из optional chaining использовать только optional static property access или optional dynamic property access, то можно тащить. Так?
rovnyart
но ведь в си шарпе и прости господи свифте давно используется такой чейнинг с вызовом методов, и там никто не жалуется
Looch
там есть типизация
Looch
а тут это может усложнить жизнь на самом деле
Looch
у тебя код не падает но работает все равно не верно или падает но не там где ты думаешь
Cenator 🐈
Thedevs.network
Anonymous
I can't joint group. What's wrong?
Cenator 🐈
Idk contact their admins
rovnyart
> can't joint
Cenator 🐈
Не флудите
Дима
а тут это может усложнить жизнь на самом деле
флоу уже давно поддерживает этот синтаксис, тс в процессе, в нём ничего сверхъестественного нет
Віталій
По крайней мере в пропозале
Віталій
https://github.com/tc39/proposal-optional-chaining#faq
Looch
ну где-то ты ожидаешь и помнишь что поставил .? а где-то просто забыл (присвоил в переменную) и ожидаешь что она всегда будет
Віталій
Ну тогда можно сам джаваскрипт назвать "опасным")
Looch
ну это просто будет еще один способ ошибится
Віталій
зато благодаря этому можно избежать других ошибок, и неочевидного кода вида user && user.address && user.address.location
Anonymous
Well, I don't know Russian. Just can speak in English. Sorry
Віталій
optional chaining всегда возвращает undefined если переменной нет, это хотя бы будет консистентно
Looch
нет таких проблем
Looch
contract-based programming же
Looch
хотя если бэк вернет херю то конечно тут это не поможет
Looch
короче надо это фичу юзать очень осознанно
Віталій
интерфесы и все окей
как это поможет, если есть некоторая вложенность в объекте?
Віталій
всё равно проверять придется, если бэк, например, не возвращает пустые обьекты вместо их отсутствия (что вполне логично)
Looch
как это поможет, если есть некоторая вложенность в объекте?
ну и с чего бы тебе не знать его структуру заранее
Віталій
мы и так знаем структуру
Дима
ну и с чего бы тебе не знать его структуру заранее
это нормально что в объекте есть не все поля
Віталій
просто некоторых полей нет
Дима
++
Looch
это нормально что в объекте есть не все поля
ну это уже другой кей который типизация тоже подскажет