
Stepan
01.07.2017
07:57:21
Нет
Распечатай строку в консоль
Чтобы без стилей

DASTAN
01.07.2017
07:58:05
спасибо, я решил

Google

DASTAN
01.07.2017
07:58:21
без шаблонных строк
обычными)

Stepan
01.07.2017
07:59:04
Норм))


Anton
01.07.2017
08:35:59
Давайте обсудим использование и хранение селекторов. Селекторы нужны, чтобы компоненты не знали о структуре нашего store.
В очередной раз пересмотрел видос Дэна Абрамова https://egghead.io/lessons/javascript-redux-colocating-selectors-with-reducers
Тут у него есть редюсер todos. И раньше его контейнер в mapStateToProps брал часть дерева, ответственную за todos: state.todos.
Чтобы инкапсулировать знание о структуре дерева в файлах редюсеров Дэн делает следующее:
1. В файле с TodoReducer он объявляет селектор getVisibleTodo(todos, filter), который принимает первым параметром срез сторы с данными о тодушках
2. В файле с главным редюсером он объявляет функцию getVisibleTodo(state, filter) => fromTodosReducer(state.todos, filter)
В итоге в компоненте мы можем использовать просто getVisibleTodo(state, filter) и при изменении стора нам нужно будет поправить только файлы редюсеров.
Все вроде бы красиво, но это только при одном селекторе. А что если у нас 10 редюсеров, каждый из которых содержит по 10 селекторов. Тогда нам нужно будет в нашем файле с rootReducer создать 100 функций, которые пробросят нужный срез дерева в нужный селектор.
Как вы решаете эту проблему? Или вооще не паритесь и используете в контейнерах конструкции типа state.todos ...


Pavel
01.07.2017
08:40:37
Давайте обсудим использование и хранение селекторов. Селекторы нужны, чтобы компоненты не знали о структуре нашего store.
В очередной раз пересмотрел видос Дэна Абрамова https://egghead.io/lessons/javascript-redux-colocating-selectors-with-reducers
Тут у него есть редюсер todos. И раньше его контейнер в mapStateToProps брал часть дерева, ответственную за todos: state.todos.
Чтобы инкапсулировать знание о структуре дерева в файлах редюсеров Дэн делает следующее:
1. В файле с TodoReducer он объявляет селектор getVisibleTodo(todos, filter), который принимает первым параметром срез сторы с данными о тодушках
2. В файле с главным редюсером он объявляет функцию getVisibleTodo(state, filter) => fromTodosReducer(state.todos, filter)
В итоге в компоненте мы можем использовать просто getVisibleTodo(state, filter) и при изменении стора нам нужно будет поправить только файлы редюсеров.
Все вроде бы красиво, но это только при одном селекторе. А что если у нас 10 редюсеров, каждый из которых содержит по 10 селекторов. Тогда нам нужно будет в нашем файле с rootReducer создать 100 функций, которые пробросят нужный срез дерева в нужный селектор.
Как вы решаете эту проблему? Или вооще не паритесь и используете в контейнерах конструкции типа state.todos ...
Отказываемся от редакса )


Denis
01.07.2017
08:42:53
мапСтейтТуПропс недостаточно инкапсулирован ?


Petr
01.07.2017
08:43:06
Давайте обсудим использование и хранение селекторов. Селекторы нужны, чтобы компоненты не знали о структуре нашего store.
В очередной раз пересмотрел видос Дэна Абрамова https://egghead.io/lessons/javascript-redux-colocating-selectors-with-reducers
Тут у него есть редюсер todos. И раньше его контейнер в mapStateToProps брал часть дерева, ответственную за todos: state.todos.
Чтобы инкапсулировать знание о структуре дерева в файлах редюсеров Дэн делает следующее:
1. В файле с TodoReducer он объявляет селектор getVisibleTodo(todos, filter), который принимает первым параметром срез сторы с данными о тодушках
2. В файле с главным редюсером он объявляет функцию getVisibleTodo(state, filter) => fromTodosReducer(state.todos, filter)
В итоге в компоненте мы можем использовать просто getVisibleTodo(state, filter) и при изменении стора нам нужно будет поправить только файлы редюсеров.
Все вроде бы красиво, но это только при одном селекторе. А что если у нас 10 редюсеров, каждый из которых содержит по 10 селекторов. Тогда нам нужно будет в нашем файле с rootReducer создать 100 функций, которые пробросят нужный срез дерева в нужный селектор.
Как вы решаете эту проблему? Или вооще не паритесь и используете в контейнерах конструкции типа state.todos ...
Проходил через это в несколько стадий: 1) сначала не парился и использовал в контейнерах state.todos. 2) потом читая Дэна в твиттере и посмотрев его видео решил запариться и сделать всё "по уму". 3) Запарлися настолько, что отказался от Redux в пользу MobX


Denis
01.07.2017
08:43:19
збс

kana
01.07.2017
08:47:37
У меня есть сторозависимые селекторы, которые хранятся рядом с редьюсерами и просто достают нужные данные из стора
А есть отдельные селекторы, которые зависят только от других селекторов
getVisible будет как раз там

Oleg ?
01.07.2017
08:49:39
Ребят, как задизеблить eslint плагин jsx-a11y в airbnb?

kana
01.07.2017
08:49:57
Хранить селекторы рядом с редьюсером имхо так себе идея

Google

Oleg ?
01.07.2017
08:50:00
Я его снёс и удалил из плагинов, но он видимо где - то в airbnb используется

kana
01.07.2017
08:50:13
Потому что можно быстро напороться на циклисеские зависимости

Oleg ?
01.07.2017
08:51:38

kana
01.07.2017
08:52:11
У меня вот такой вопрос, сейчас стартовал новый проект, решил получше задуматься о структуре. Ранее у меня была папка компонентов и папка контейнеров. В компонентах чисто чистые компоненты, которые ничего не знают о сторе. В контейнерах компоненты, которые связаны со стором, имеют стейт и логику
А вот часто бывает ситуация, когда у нас вроде как чистый компонент, но рисует внутри контейнер
Вот куда его?
Есть идея ввести новую папку layouts
Я и говорю, что сторозависимые селекторы у меня рядом с редьюсером, а вот селекторы, которые зависят только от селекторов - отдельно

Oleg ?
01.07.2017
08:54:53

Сергей
01.07.2017
08:54:58

kana
01.07.2017
08:55:23

Сергей
01.07.2017
08:55:31

Denis
01.07.2017
08:55:40

kana
01.07.2017
08:55:46
Фишка селекторов в том, что можно строить дерево зависимостей

Oleg ?
01.07.2017
08:55:50
Ну строй дальше
Я не против)

kana
01.07.2017
08:56:15
И типа если предки не меняются, то и ребенок не меняется
И это дает ускорение

Google

kana
01.07.2017
08:56:47
getVisibleTodos из таких
Он берет тудусы из селектора и фильтр из селектора

Oleg ?
01.07.2017
08:57:22
Всё ровно не понимаю как и зачем это работает

kana
01.07.2017
08:57:29
И если ни тудусы не меняются, ни фильтр, то и висиблТудус не меняются

Oleg ?
01.07.2017
08:57:53
Типо селектор сначала выбирает все туду, затем применяешь селектор которые возвращает только те, которые видны?
Если так, то я бы написал один слектор, который всё это делает

kana
01.07.2017
08:59:36
https://github.com/Day8/re-frame/blob/master/docs/SubscriptionInfographic.md

Oleg ?
01.07.2017
09:00:21
Reselect?

kana
01.07.2017
09:00:38
А селекторы, которые зависят от селекторов, только если один из селекторв меняется
Я использую реселект, но идею реселекта взяли из субскрйберов рефрейма
Я на рефрейме раньше писал

Oleg ?
01.07.2017
09:01:21
Идея интересная, но у меня не возникало таких сложных зависимостей, чтобы до 5 слоя
Максимум 2 слоя

kana
01.07.2017
09:01:42
Это повезло значит)

Oleg ?
01.07.2017
09:02:23
И тебе типо не удобно селекторо зависимые селекторы хранить рядом с редьюсером?

kana
01.07.2017
09:02:51
Да, потому что часто требуются селекторы от других редьюсеров
А там тоже могут понадобиться селекторы из первого редьюсера
И начнется цикл

Oleg ?
01.07.2017
09:03:36
Я бы создал для таких селекторов отдельную папочку в редьюсерах

Google

kana
01.07.2017
09:03:50
Да и куда отнести селектор getVisibleTodos

Oleg ?
01.07.2017
09:04:01
типо hos - hight ordered selectors )

kana
01.07.2017
09:04:05
Он же зависит и от тудус, и от фильтра

Oleg ?
01.07.2017
09:04:19
В эту папочку

Anton
01.07.2017
09:04:20
я сейчас склоняюсь к такому варианту. В TodoReducer описыватся редюсер getVisibleTodos(todos, filter).
В рутовом редюсере описывается getTodosState(state) => state.todos
Тогда в mapStateToProps мы юзаем так:
{
todos: getVisibleTodos(getTodosState(), filter)
}
Тогда и структура стора изолированна в селекторах и в рутовый редюсер не надо выносить все селекторы из всех редюсеров.

kana
01.07.2017
09:05:16
Все mapStateToProps я создаю через структурный селектор в reselect

Denis
01.07.2017
09:05:21

Anton
01.07.2017
09:05:38

Denis
01.07.2017
09:05:42
че с кложи ушел

Admin
ERROR: S client not available

kana
01.07.2017
09:05:46
А сейчас я перешел с фриланса на офис и нужно на реактн
https://github.com/reactjs/reselect/blob/master/README.md#createstructuredselectorinputselectors-selectorcreator--createselector
mapState - тоже селектор, который генерит объект
Вот этот createStructured и создает объект из селекторов
Как combineReducers, только Selectors

Anton
01.07.2017
09:11:50
Круто. Типа такого?
export default connect(
(state) => structuredSelector(todosSelector, projectSelector, (todos, project) => ({todos, projects}))
)(Root)

Сергей
01.07.2017
09:13:26

Anton
01.07.2017
09:13:53
Во, Сова пришел! Научи как правильно

Сергей
01.07.2017
09:14:49
ща
надо весь тред читать

Dreamerinnoise
01.07.2017
09:15:25

Google

kana
01.07.2017
09:17:02

Denis
01.07.2017
09:17:17
совсем не круто
просто чувак от организации пришел к каше
но только в мобикс
и думает это решение
потому что там каша
это официальный подход

kana
01.07.2017
09:18:09

Dreamerinnoise
01.07.2017
09:18:10
што

kana
01.07.2017
09:18:51
поинтфри же, эта-редукция, убираем лишние аргументы

Oleg ?
01.07.2017
09:19:22
Красота, люблю, когда так аккуратно)

Anton
01.07.2017
09:19:37
ага, понял

kana
01.07.2017
09:20:23
если еще называть селекторы как пропсы, так вообще збс было бы

Oleg ?
01.07.2017
09:21:21
Есть знатоки yarn? как поставить package-name@^1.2.3 ?
В npm это npm install package-name@1
а в ярн не получается так поставить :c
Или это взаимоисключающие штуки в yarn?
Да, я ответил сам себе на вопрос...
Окей, тогда новый вопрос, как поставить последнюю версию мажорного пакета, типо package-name@1.X.X, где X.X. последняя версия

Anton
01.07.2017
09:27:28
@kana_sama, в твоем кейсе getIsMessagesFetching имеет вид
getIsMessagesFetching = state => state.messages.isFetching ?

kana
01.07.2017
09:27:59

Oleg ?
01.07.2017
09:27:59
Лол, я проспал релиз вебпака 3.0.0