@react_js

Страница 1597 из 5115
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

Нормальная идея, у меня на оборот были случаи, когда я радовался тому, что селектор рядом с редьюсером лежит
Скорее всего потому, что этот селектор зависил от структуры стора и его легко было исправить

Я и говорю, что сторозависимые селекторы у меня рядом с редьюсером, а вот селекторы, которые зависят только от селекторов - отдельно

Сергей
01.07.2017
08:54:58
kana
01.07.2017
08:55:23
У меня таких селекторов нету
Значит это хреновая структура селекторов, потому что от них нет профита почти)

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
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)

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

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

Google
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

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