@react_js

Страница 2193 из 5115
Ostap
23.09.2017
13:24:13
тебе нужен гибридный тип. который будет зависить от данных на входе

.union как раз оно

Stepan
23.09.2017
13:24:37
andretshurotshka?❄️кде
23.09.2017
13:26:41
Google
Ostap
23.09.2017
13:27:31
да. ты сам решаеш какой тип определить в рантайме

andretshurotshka?❄️кде
23.09.2017
13:30:24
я как понял там все равно надо список типов передавать?

Dmitry
23.09.2017
14:09:38
Всем привет, подскажите пожалуйста как в реакте лучше реализовать вызов библиотеки (например у меня есть scrollbar и он много где используется)

Max
23.09.2017
15:25:40
и потом был на нескольких конференциях где ребята жаловались что помирают от кучи сервисов
Какое-то полное непонимание. Сервисов в ангуляре или сторов в мобиксе не может быть много или мало - сторов должно быть ровно столько сколько сущностей в приложении. Вот есть приложение где юзер может создавать папки, в папках проекты в проектах задачи а в задачах комментарии. Сколько нужно создать сторов или сервисов? Мой ответ - ровно 4 - User, Folder, Project, Task, Comment, и я не могу понять в чем проблема количества сторов и их некосистентности

Max
23.09.2017
15:32:34
Когда ты делаешь большое монолитное приложение где много моделей и взаимосвязей, то так просто не разобьешь все на сущности и на сервисы для них.
ни разу не встречался с такой проблемой и вообще не представляю как это может быть - даже самое сложное бизнес-приложение можно разбить на сущности, в конце концов они же как-то в базе данных хранятся со связями one-to-many и many-to-many. Если правильно спроектировать сущности и связи то состояния никак не могут пересекаться и какую-то сущность можно обновить только в одном месте

Dmitry
23.09.2017
15:36:46
в базе и на беке нету такой штуки как отображение. А на юайке этот фактор может влиять на поведение и на постороение (из-за каких-то юайных запросов) и это усложняет задачу постороения правильной архитектуры фронтенда. Часто в какой-то сущности которая никак не связанна с остальными приходится знать очень много инфы про остальные сервисы и при этом иметь собственое состояние. Редукс упрощает задачу менджмента всего этого т.к у тебя в любом месте может быть инфа про все состояние приложения и ты можешь изменить любую часть приложения при этом данные остануться консистентными

Дмитрий
23.09.2017
15:37:41
В базах кстати есть view, но он не для фронта))

Хотя суть та же, да

Dmitry
23.09.2017
15:38:33
А если все строить с архитектурой сервисов, то кто-то или случайно или под просто из-за недостатка времени впедалит в сервис какуе-то переменную isButtonToggled и это переменную надо будет обновлять с десятка других сервисов

и завязываться на нее

Google
Dmitry
23.09.2017
15:38:46
и выходит каша из взаимосвязей

Dmitry
23.09.2017
15:42:14
Ну так fuck this guy
Я примерно говорю. Кто-то сделал неправильное архитектурное решение которое вылезло только при скейлинге или при запросе следующей пачки фич.

Max
23.09.2017
15:45:47
в базе и на беке нету такой штуки как отображение. А на юайке этот фактор может влиять на поведение и на постороение (из-за каких-то юайных запросов) и это усложняет задачу постороения правильной архитектуры фронтенда. Часто в какой-то сущности которая никак не связанна с остальными приходится знать очень много инфы про остальные сервисы и при этом иметь собственое состояние. Редукс упрощает задачу менджмента всего этого т.к у тебя в любом месте может быть инфа про все состояние приложения и ты можешь изменить любую часть приложения при этом данные остануться консистентными
я пришел к прямо противоположному выводу. Все что ты написал это как раз и относится к тому как разбить на сторы и связать состояние и если состояние разбить на сущности как я говорил все проблемы решаются. Например касательно проблемы "Часто в какой-то сущности которая никак не связанна с остальными приходится знать очень много инфы про остальные сервисы и при этом иметь собственое состояние" - то это решается обратными ссылками на родительскую сущность - при создании объекта project, task, comment записываем ссылку на родителя и тогда в любом месте приложения можем получить нужное состояние просто пройдясь по ссылке. Наример есть глубина объектов - user -> (хранит массив объектов) -> folder -> project -> board -> task -> comment - и если нам нужно где-то в компоненте комментария узнать имя папки в котором он находится то достаточно только пройтись по родительским ссылкам - comment.task.board.project.folder.name

Dmitry
23.09.2017
15:46:32
у нас в текущем проекте такая же архитектура

проект очень большой

и выглядит это как дичь

когда ты пишешь

parent(‘Toolbar’).set(‘qwe’, ‘qer); parent(‘Toolbar’).save()

разобраться в этой каше хреново, дебажить еще хуже

все мутируется и это тяжело отследить.

разширить какуе-то логику (что-то тип мидлвар), то это вообще какой-то костыль приходится придумывать

Dmitry
23.09.2017
15:51:59
редукс это правильный подход в разработке веб приложений, хоть и не самый лучший. В экосистеме vue, vuex выглядит удобнее и с меньшим количество боилплейта

Max
23.09.2017
15:54:32
разобраться в этой каше хреново, дебажить еще хуже
Хорошо, а как ты сделал бы в редаксе этот пример с юзером, папками, проектами, задачами и комментариями? Учитывая что в редаксе нельзя создавать ссылки между объектами нам бы пришлось стор нормализировать и записывать в свойства айдишники вместо ссылок и приходим к тому что нужно на каждый чих вытаскивать айдишник из стора. И получам целую портянку вот такого кода const store = getStore(); store.folders[store.projects[store.boards[store.tasks[comment.taskId].boardId].projectId].folderId].name вместо лаконичного и простого comment.task.board.project.folder.name

Dmitry
23.09.2017
15:55:43
ну если говорить за правильный подход, то тут правильно было бы нормализировать структуру

и взять просто по айдишке фолдера

нужный нейм, но может быть куча других кейсов когда надо структура со вложенностью

Google
Dmitry
23.09.2017
15:56:53
и там да приходится выкручиваться под каждый кейс и думать с реселектом

Ну а если суть задачи стоит в получении нейма фолдера для коментария

У меня была похожая задача, то я через контекст получаю айдишку перента и потом обращаюсь к стору

Max
23.09.2017
16:00:28
и взять просто по айдишке фолдера
у нас нет айдишника папки, у нас есть компонент комментария где мы должны в обработчике проверить какое-то свойство папки чтобы разрешить какое-то действие. В объекте комментария у нас есть только айдишник таска и нам теперь нужно вытаскивать всех по очереди - вытащив таск узнать айдишник борда, вытащив борд узнать айдишник проекта, и только вытащив проект узнать айдишник папки, чтобы прийти к объекту папки и узнать нужное свойство

Ilya
23.09.2017
16:01:04
Пытаюсь понять проблему которой тут идёт обсуждение и не вижу никакой проблемы или чего-то сложного

Ilya
23.09.2017
16:02:16
Если прикинуть структуру компонентов то если я правильно понял, одно вложено в другое?

Dmitry
23.09.2017
16:02:22
да

Ilya
23.09.2017
16:02:41
И вы используете context?

Dmitry
23.09.2017
16:03:05
сталкивался с похожей проблемой и использовал контекст для того что бы не делать огромную выборку

Ilya
23.09.2017
16:04:38
Ага, и по контексту вы из глубокого компонента ползёте вверх за нехватающими свойствами?

Dmitry
23.09.2017
16:04:38
была система тулбаров которые были должны были быть связанны между собой и состояние одного тулбара могло влиять на поведение другого и это связывалось с помощью айдишек в контексте

Ilya
23.09.2017
16:06:00
А почему вы не прокидываете все пропсами сверху вниз?

Max
23.09.2017
16:06:13
вот что бы такого небыло когда мы вызываем сервис мы можем с контекста в сервис/екшин передать нужный айдишник фолдера или борда для проверки
А как передать? мы можем передавать только пропсами что-то в компонент, но вот этот вариант еще хуже потому что каждый раз когда глубоко вложенному компоненту потребуется какая-то новая инфа мы должны менять рендер всех вышестоящих компонентов чтобы пробросить нужную инфу, в данном случае айдишник паки через все промежуточные, и это все ведет к разрастанию пропсов. Поэтому уж лучше компонент сам будет вытаскивать по айдишнику нужные ему объекты но все равно необходимость постоянно вытаскивать по айдишниками и код подобно const store = getStore(); store.folders[store.projects[store.boards[store.tasks[comment.taskId].boardId].projectId].folderId].name значительно уступает возможности получить нужный объект пройдясь по ссылкам используя мобикс comment.task.board.project.folder.name

Dmitry
23.09.2017
16:06:32
А почему вы не прокидываете все пропсами сверху вниз?
это было бы правильно, но очень большая вложенность и это портит чистоту кода

Ilya
23.09.2017
16:07:39
Ничего не портит, максимум с чем у вас могут быть проблемы при таком подходе, это если на цепочке компонентов окажется HOC

Google
Stanislav
23.09.2017
16:08:09
Ilya
23.09.2017
16:08:16
штук 20
Бладж :)

Stanislav
23.09.2017
16:08:28
Не надо работать, когда мозг отказывает

Dmitry
23.09.2017
16:08:48
это все хоки

и потом это еще раз компоузится

Andrey
23.09.2017
16:09:03
Ох...

Я кончил

Dmitry
23.09.2017
16:09:09
на разные специфические компоненты

даже для лайтбокса есть хок

Stanislav
23.09.2017
16:09:29
Функциональщина в Реакте?

Dmitry
23.09.2017
16:09:46
даже для лайтбокса есть хок
которая может связать все картинки на сайте в одну колекцию

Дмитрий
23.09.2017
16:10:09
Функциональщина в Реакте?
Про фп сегодня флеймят соседнем чате))

Dmitry
23.09.2017
16:10:15
еще плануем все хоки оборачивать в другие хоки

что бы можно было писать геттеры

для параметров

в хок

Andrey
23.09.2017
16:10:43
А потом спрашивают. Почему браузер столько оперативы жрёт?

Google
Stanislav
23.09.2017
16:10:49
Про фп сегодня флеймят соседнем чате))
А что про неё флеймить? Сложна?

Dmitry
23.09.2017
16:10:51
ну это в теории

Andrey
23.09.2017
16:11:19
Слушаешь?

Дмитрий
23.09.2017
16:11:46
Хз что это

Andrey
23.09.2017
16:12:03
А, я думал, что ты завтракаст слушаешь.

Dmitry
23.09.2017
16:15:03


Ilya
23.09.2017
16:15:44
ну это в теории
Так, а чем обусловлено кстати обусловлено такое количество хоков?

Dmitry
23.09.2017
16:15:59
ее надо как-то реюзать между компонентами

без изменения кода компонентов

Dmitry
23.09.2017
16:17:08
тот же спейс

Страница 2193 из 5115