Dmitriy
Максим
Всем привет! Тестирую компоненты с помощью 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
Dmitriy
King
получается только так ¯\_(ツ)_/¯
Anonymous
Roman
функ высшего
Dmitriy
☕️
Dmitriy
Дима
const {data = {}} = useQuery(USER)
const {current} = data
Дима
const {data} = useQuery(USER)
const current = data?.current
☕️
Два чая комментирующему выше
Dmitriy
А аргументы почему так лучше?
Dmitriy
☕️
Потому что это выглядит визуально проще
Вообще стараюсь оператор
или
пореже использовать
Дима
ни в каком проекте нельзя использовать стейджи, уже давно
Дима
забудь про это слово вообще
Дима
целесообразность каждого плагина рассматривается отдельно и подключаются они тоже отдельно
Дима
но если у вас в проекте nullable queries, особенно если graphql и техлид лбом упирается в "не хочу" то костылей у вас будет ещё много)
Дима
единственное что сейчас optional chaining под вопросом (no pun) — это вызовы методов с этим синтаксисом и это абсолютно излишняя фигня. чтение обычных nullable полей ни у кого разногласий уже давно не вызывает, а концепция graphql так и подавно изначально рассчитывает на него
Dmitriy
Дима
ну вообще говоря о стейдже париться нужно, просто я поясняю почему именно в этом случае можно использовать не парясь
Dmitriy
С какого стейджа можно в прод тянуть по вашему?
Dmitriy
Лучше всего stage-3 дожидаться как минимум
Dmitriy
rovnyart
Дима
нет, нет, нет, именно про них я и говорю. вызов методов после 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 🐈
Не флудите
Looch
Віталій
Віталій
По крайней мере в пропозале
Віталій
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
нет таких проблем
Looch
contract-based programming же
Looch
хотя если бэк вернет херю то конечно тут это не поможет
Looch
короче надо это фичу юзать очень осознанно
Віталій
всё равно проверять придется, если бэк, например, не возвращает пустые обьекты вместо их отсутствия (что вполне логично)
Looch
Віталій
мы и так знаем структуру
Дима
Віталій
просто некоторых полей нет
Дима
++