@react_js

Страница 1106 из 5115
Pavel
21.03.2017
20:16:45
дык есть апи
1. У вас есть store который содержит некие сущности (entities) 2. У вас есть reducer-ы, которые позволяют осуществлять менеджмент этих сущностей на основе обробатываемых actions 3. У вас есть actionCreators, которые позволяют производить асинхронные запросы, делать вычисления и в конечном итоге делать dispatch в store некоторых action, что в последствии меняет state 4. У вас есть селекторы (selectors) которые позволяют на основе входых параметров взять часть state сделать преобразование и на выходе получить нормализованные данные для каких-то нужд 5. У вас есть react-redux и метод connect, который позволяет используя методы mapStateToProps и селекторы спроецировать state на props компонента и mapDispatchToProps, чтобы спроецировать набор actionCreators на props

MadMax
21.03.2017
20:17:22
Да

все 5 да

Pavel
21.03.2017
20:17:46
Сответственно настроив оперделенные правила селекторов вы получаете фильтрацию

Google
Play
21.03.2017
20:19:02
для новичка и не только рекомендую изучение официальной документации, прочитать которую будеть легче после курса по изучению частотного англо-русского словарика. В состав которого вошли 2553 выбраных из официальной документации React и React Native слов, изучение которого легче с мобильным приложением Memrise https://www.memrise.com/course/1450006/react-react-native/ Сделал для себя, если найдете ошибки пишите, пофиксю.

Razzwan
21.03.2017
22:14:40
так вот вопрос. Если есть какая то кнопка фильтрации/ сортировки. Где лучше эту фильтрацию сартировку проводить?
Зависит от объема данных. Большой объем данных лучше сортировать на сервере - и выдавать результат, т.к. в противном случае, придется слать большой объем данных клиенту, который просто будет занимать место. Если же количество данных необходимо всегда пользователю в полном объеме (например, список его задач на текущий момент), то конечно нет смысла сортировать задачи по типу на сервере. Нужно сортировать на клиенте, т.к. высока вероятность того, что пользователю понадобятся все данные.

Я делаю так: в момент выбора фильтра посылаю запрос к серверу и одновременно с этим оптимистично фильтрую на клиенте. От сервера потом могут прийти уточнённые данные, список перерендрится
странноватая логика. Я всегда точно знаю, могу я получить точный результат исходя из имеющихся данных - или нет. Поэтому, если я могу получить точный результат без сервера - я его получаю. Если нет - жду ответ от сервера. Иначе, получается, что пользователь попросит выбрать ему красивых девушек, а мы, "оптимистично", выдадим ему обезьян. А что - девушки же. Пользователь может и обидеться.

Можно и более реальны пример привести, с городами. Мы вводим "Москва", а нам, оптимистично, выдает "Нью-Йорк". Разве не странное поведение?

Dmitry
21.03.2017
23:22:47
1. У вас есть store который содержит некие сущности (entities) 2. У вас есть reducer-ы, которые позволяют осуществлять менеджмент этих сущностей на основе обробатываемых actions 3. У вас есть actionCreators, которые позволяют производить асинхронные запросы, делать вычисления и в конечном итоге делать dispatch в store некоторых action, что в последствии меняет state 4. У вас есть селекторы (selectors) которые позволяют на основе входых параметров взять часть state сделать преобразование и на выходе получить нормализованные данные для каких-то нужд 5. У вас есть react-redux и метод connect, который позволяет используя методы mapStateToProps и селекторы спроецировать state на props компонента и mapDispatchToProps, чтобы спроецировать набор actionCreators на props
а не наоборот? Встречал рекомендацию как раз нормализованный стейт делать, а вот уже его при экспорте данных, через селекторы конвертить в json-дерево

Pavel
21.03.2017
23:23:47
Наоборот, что именно?

Dmitry
21.03.2017
23:24:17
Упс, всё процитировалось. Имел в виду пункт 4

Pavel
21.03.2017
23:25:57
Упс, всё процитировалось. Имел в виду пункт 4
Нормализация процесс относительный от субъекта использования данных. В state данные нормализованы относительно логики работы reducer. selector-ы и mapStateToProps позволяет сделать нормализацию относительно субъекта (Компонента) их использующих.

Dmitry
21.03.2017
23:27:59
Логично. Я почему прицепился - ну вот лично у меня не получается юзать стейт который плоский прям как БД. 2-3 уровня иерархии точно есть и это удобно

Pavel
21.03.2017
23:29:04
Для переиспользуемой архитекутры flatten state - обязательное условие. Когда мы говорим о сущностях БД. Могут быть отдельные разделы дерева, которые отражают не состояние сущностей. Там может быть достаточно сложная структура.

Dmitry
21.03.2017
23:29:19
и что-то парит меня эта ситуация. Наверное при нагрузке это выльется в оверхед от постоянного JSON.parse(JSON.stringify(state)) в редьюсерах

Мммм..

Google
Pavel
21.03.2017
23:29:34
Это позволяет максимально просто сделать кэширование и мэпинг dataToObject.

Dmitry
21.03.2017
23:30:57
т.е. предметные данные, которыми оперирует прога - храним плоско, а всякая служебная мелочевка - храним как удобно. Ок

Pavel
21.03.2017
23:31:08
Все верно.

Denis
21.03.2017
23:31:30
Pavel
21.03.2017
23:32:30
И для клиент-серверного взаимодействия стоит обратить внимание на GraphQL - это избавит от изобретения велосипедов в redux с обработкой хотя бы своего взаимдействия с сервером.

Многие проекты напрямую не работают с redux, а используют его как точка интеграции набора библиотек использующих через middleware redux.

Dmitry
21.03.2017
23:44:33
Чем плохо выделить шаренный код (редьюсеры и action creator'ы) в отдельный проект, подключить и на клиенте и на сервере и гонять голые actions json'ами по сети? Вполне себе взаимодействие, вполне себе синхронизированное состояние (ну или его общая часть)

Правда, тогда redux нужен и на сервере и на клиенте. Но опять же всю логику на нем можно и не делать

Alex
21.03.2017
23:47:23
А зачем редакс на сервере?

Pavel
21.03.2017
23:47:30
redux и так делается и на сервере зачастую и на клиенте, по крайней мере для компонент при SSR он нужен.

Чем плохо выделить шаренный код (редьюсеры и action creator'ы) в отдельный проект, подключить и на клиенте и на сервере и гонять голые actions json'ами по сети? Вполне себе взаимодействие, вполне себе синхронизированное состояние (ну или его общая часть)
Чем плохо - причин много: 1. Это синхронизация по сути, где у вас будет при одном клиенте один сторе на сервере. При 1000 - 1000 2. Это ограничения по правам доступа 3. Это механизмы кэширования, которые можно написать заново, но зачем если уже все написано

Потеря в масштабируемости для балансировки и проксирования запросов API.

Как эксперимент - почему нет! )

Котяй Негодяй
21.03.2017
23:52:10
А зачем редакс на сервере?
Везде, где есть стейт, будет удобен редакс. Если на сервере нужно держать стейт, имеем право.

Pavel
21.03.2017
23:53:04
Не просто имеем право, а имеем необходимость для SSR.

Котяй Негодяй
21.03.2017
23:53:40
Ну, я сейчас не только в контексте вебапп говорю, а вообще.

Допустим, нужно бота поднять на ноде для телеги.

В голове есть уже готовые паттерны, реализация которых встанет как родная.

Dmitry
22.03.2017
00:03:08
Насчет graph-ql. Согласен что есть все эти проблемы - кэш, аутентификация, балансировка. Но вот читаю про graph-ql - это тупо язык запросов. Какое он имеет отношение ко всем этим инфраструктурным проблемам...

Google
Ywein
22.03.2017
00:04:32
всмысле если у тебя масштабы и сложность не шкалит

Pavel
22.03.2017
00:04:50
Например у нас из простых конфигурационных файлов автоматически генерируется backend - БД + GraphQL API - front-end GraphQL API - CRUD + subscription и это очень лаконично.

Каждый модуль выглядит примерно так:



Интеграция же с компонентами делается посредством HOCFactory с заданием нужных параметров генерации запросов, где делать запросы и мутации, делать ли polling и прочие параметры.

Так же большим плюсом GraphQL является передача типа сущностей внутри ответа, что позволяет делать синхронизацию кэша даже из побочных ответов севера.

Dmitry
22.03.2017
00:19:10
В общем суровый Ынтырпайз. Спасибо за ликбез :)

Pavel
22.03.2017
00:19:42
Enterprise не Enterprise, но чертовски удобно! )

Anton
22.03.2017
00:21:29
помоему graph-ql не нужен если ты не фейсбук.
Даже для очень маленького приложения graphql очень удобен

Alex
22.03.2017
00:22:18
Pavel
22.03.2017
00:22:40
В соседней конфе смотрите какие люди! )

Pavel
22.03.2017
00:22:44


Dmitry
22.03.2017
00:24:10
А что за конфа? :)

Pavel
22.03.2017
00:24:39
Известный факт, самое большое react сообщество - https://www.reactiflux.com/

Dmitry
22.03.2017
00:24:45
Хочу посмотреть как они свой dnd объяснять будут

Ywein
22.03.2017
00:25:58
Даже для очень маленького приложения graphql очень удобен
эх, не понимаю я чем. пробовал его использовать, он выглядит очень громоздким

Dmitry
22.03.2017
00:26:42
Discord какой-то хотят, не телегу

Pavel
22.03.2017
00:27:05
Discord - это серьезный аппарат для подобных конференций.

Google
Pavel
22.03.2017
00:27:10
Telegram отдыхает.

Dmitry
22.03.2017
00:27:18
Верните irc пожалуйста xD

Pavel
22.03.2017
00:27:35
Вы можете запустить его в браузере.

Это изначально альтернатива TeamSpeak для геймеров.

А дальше разрослось.

Yung
22.03.2017
00:28:38
slack для геймеров я бы сказал

Anton
22.03.2017
00:29:02
я знаю мессенджер, который тоже можно запустить в браузере

забыл какой

Admin
ERROR: S client not available

Dmitry
22.03.2017
00:29:24
Да, описание в аппсторе - чат для геймеров . Все оч серьёзно , ставлю

Слак.

Ywein
22.03.2017
00:30:24
Anton
22.03.2017
00:31:20
а я про что

Pavel
22.03.2017
00:31:35
relay и сопутствующее
Действительно после Relay может сложиться такое мнение.

Ywein
22.03.2017
00:32:08
Yung
22.03.2017
00:32:15
Pavel
22.03.2017
00:32:24
Я уже писал выше про него. Да.

У меня сделана реализация с множественными подсистемами, каждая из которых имеет свою GraphQL схему и свой datastore => через sequelize и свой сервер подисок через ws.

Google
Pavel
22.03.2017
00:33:49
И это летает и очень компактно.

Ywein
22.03.2017
00:36:39
Apollo я так понял это для фронтенда, а на сервере что используете?

Pavel
22.03.2017
00:37:03
Его же. У них в стэке есть и серверная часть.

Сразу скину middleware сюда, чтобы было на чем базировать.

Pavel
22.03.2017
00:38:44
https://gist.github.com/lokhmakov/ed6170cb085d070aa22bad44528e53e4

Alex
22.03.2017
00:39:18
Ващета нет.
Ноду на сервере только ужасные люди используют.

Pavel
22.03.2017
00:39:19
middleware комплексный, возьмите только базовые вещи без множественных схем.

Так же в моем примере processGraphiQL вытащенная реализация из их исходников, под наши нужды. Вам можно использовать настроку endpoint в graphqlExpress.



)

Anton
22.03.2017
00:50:09
https://gist.github.com/lokhmakov/ed6170cb085d070aa22bad44528e53e4
а зачем там graphiqlExpress если он не используется?

Pavel
22.03.2017
00:51:18
Недавно избавились от этой зависимости, import не убрали

Anton
22.03.2017
00:51:24
а, понял

сильно ли критично не выносить проверку прав в модели, а делать это в резолверах?

Pavel
22.03.2017
00:56:14
Обычно это делается либо перед резолвером, либо в резолвере.

Контекст пользователя добавляется до middleware graphql

И уже потом передаётся в каждый резолвер

Ограничение прав делается на основании названия запроса, его параметров и контекста

Котяй Негодяй
22.03.2017
01:11:55
Ноду на сервере только ужасные люди используют.
Так говорят только религиозные фанатики, которые ничего не понимают.

Anton
22.03.2017
01:14:12
ну это понятно. в резолвере делать не советуют, а советуют передавать контекст в модель, типо User.update(user, context.user)

типо если есть еще и другие api, rest например

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