
Dmitry
25.10.2017
18:50:56

kana
25.10.2017
18:51:13
мало того, используя экшоны, ты отвязываешь свой бизнес-логик-код от того, как выглядит стейт
и будет очень легко вообще поменять редакс на другое хранилище
или поменять структуру редьюсеров

Google

kana
25.10.2017
18:51:50
экшоны не поменяются
экшоны это как API твоего хранилища
интерфейс

Dmitry
25.10.2017
18:52:27
У меня с таким подходом вышла небольшая проблема
Слишком много екшонов диспатчатся в редукс

kana
25.10.2017
18:53:02
это решается через трандьюсер filter
решается - это круто сказано конечно)
на самом деле это будет много бойлерплейта. Но перформанс возрастет

Дмитрий
25.10.2017
18:53:42

Dmitry
25.10.2017
18:53:55

Andrey
25.10.2017
18:54:11
А нук
За этим лучше в доку.

kana
25.10.2017
18:54:12
я помню, когда-то очень давно читал код react-redux и там все просто и красив
зашел полгода назад, а там пиздец

Google

Дмитрий
25.10.2017
18:54:24
Ага
Невероятноек количество вариантов работы)

Dmitry
25.10.2017
18:54:39

Alex
25.10.2017
18:54:51
я представляю экшон как единственный модификатор стейта с единственным результатом, разве когда один экшон меняет стейт в разных местах это не увеличивает сложность отладки и не повышает вероятность непредвиденных изменений?

kana
25.10.2017
18:55:47
экшон - не модификатор, это просто какое-то сообщение, он может и стейт не менять в принципе

Дмитрий
25.10.2017
18:56:01
На заметку взял приём когда мы в коннекте забираем id из initialProps и возвращаем функцию, чтобы делать выборку из стейта больше не сверяясь с ownProps вообще

kana
25.10.2017
18:56:25
пример пожалуйста, на словах я ничего не понял

Dmitry
25.10.2017
18:56:33
да пример

Дмитрий
25.10.2017
18:56:37
Ну типичный кейс такой, ща

Dmitry
25.10.2017
18:57:06
А типа рантайм селектор от айди

Дмитрий
25.10.2017
18:57:19
Наоборот не рантайм

Dmitry
25.10.2017
18:57:22
(
жаль, а то мне пригодилось бы
А то я фигачу селекторы через пропсы (

kana
25.10.2017
18:58:25
селекторы, зависимые от пропсов - вообще больная для меня тема


Dmitry
25.10.2017
18:59:55
Кстать мне еще вот такой концепт понравился
const initialState = createState({
users: [],
genderFilter: null,
filteredUsers({ users, genderFilter }) {
return users.filter(user => !genderFilter || user.gender === genderFilter);
},
totalPosts({ filteredUsers }) {
return filteredUsers.reduce((sum, user) => sum + user.postsCount, 0);
}
})
// Create a new state, updating 'users' value
const newState = initialState.copy({
users: [
{ name: 'John Doe' , gender: 'M', postsCount: 10 },
{ name: 'Jane Doe' , gender: 'F', postsCount: 5 },
{ name: 'Alan Turing' , gender: 'M', postsCount: 15 },
{ name: 'Ada Lovelace' , gender: 'F', postsCount: 16 }
]
})
с селекторами

kana
25.10.2017
19:00:34
ух

Google

Alex
25.10.2017
19:00:50

kana
25.10.2017
19:01:05
ну так экшоны может слушать не только стор
а всякие мидлвары типа thunk/saga, а стор их можно игнорить

Alex
25.10.2017
19:02:08
я не отказываюсь от экшенов вообще, но те что меняют стор я пишу так как скинул

Дмитрий
25.10.2017
19:05:07
пример пожалуйста, на словах я ничего не понял
Есть какой-то список в стейте и в компонент прокидываются его id чтобы он сидел там себе выбирал что ему нужно
Обычный вариант
const connect(({ list }, { id }) => ({
data: list.get( id )
})
Минусы — постоянно сверяется с ownProps
Альтернатива
const connect((initialState, initialProps) => {
const { id } = initialProps
return (state) => ({
data: list.get( id )
})
}
Многим знакомо по идее но почему то в реальности почти никогда не используется)

kana
25.10.2017
19:06:02
ну, тут есть учет, что id никогда не поменяется)

Dmitry
25.10.2017
19:06:26
А профит только в том что проверки с ownProps не будет ?

Дмитрий
25.10.2017
19:06:51

Alex
25.10.2017
19:07:03
по сути, у меня всё тот же экшон, но reducer in action, я всегда знаю как изменится стор, вместо того чтобы подписывать сторы на экшены, я меняю стор там где это нужно за 1 раз.
Как это может стать боком в будущем?

kana
25.10.2017
19:08:02
ну как можно сделать, вроде
// selectors
const itemById = createSelectors(
items,
(state, props) => props.id,
(items, id) => items[id]
);
// component
const mapStateToProps = createStructuredSelector({
item: itemById
});

Дмитрий
25.10.2017
19:09:23
Самая жесть дальше)
connectAdvanced

Dmitry
25.10.2017
19:10:45
хм, а создавать сдесь селекторы
решает проблему с динамическими селекторами
и не надо как пропсы их

Play
25.10.2017
19:11:07

Дмитрий
25.10.2017
19:11:13

Dmitry
25.10.2017
19:11:15
блин, я даже не знал что есть такое

Google

Dmitry
25.10.2017
19:11:18
Спасибо
Кстать мне еще вот такой концепт понравился
const initialState = createState({
users: [],
genderFilter: null,
filteredUsers({ users, genderFilter }) {
return users.filter(user => !genderFilter || user.gender === genderFilter);
},
totalPosts({ filteredUsers }) {
return filteredUsers.reduce((sum, user) => sum + user.postsCount, 0);
}
})
// Create a new state, updating 'users' value
const newState = initialState.copy({
users: [
{ name: 'John Doe' , gender: 'M', postsCount: 10 },
{ name: 'Jane Doe' , gender: 'F', postsCount: 5 },
{ name: 'Alan Turing' , gender: 'M', postsCount: 15 },
{ name: 'Ada Lovelace' , gender: 'F', postsCount: 16 }
]
})
но все же в 70% кейсов мне вот так бы селекторы хотелось обьявлять

Play
25.10.2017
19:13:28
Почему по центру не встает селектор?
Куда уже только не вставлял justifyContent: 'center'
<div style={{ flex:1, justifyContent: 'center' }}>
<form style={{ width: 87 }}>

Alex
25.10.2017
19:14:07

Dmitry
25.10.2017
19:15:17
А что за датабейс и почему ты это делаешь в селекторе ?

Alex
25.10.2017
19:15:24

Play
25.10.2017
19:16:34

Dmitry
25.10.2017
19:16:35
Блин я до сих пор думаю про фектори для коннекта, это ж сколько говнокода я мог избежать

Alex
25.10.2017
19:16:41
датабейс это обёртка для извлечения данных, структура стейта примерно такая
{
database:{
faculties[];
lecturers[];
}
}
так же обёртка сохраняет типы и я могу рефакторить бд по всему коду без копипаста

Dmitry
25.10.2017
19:16:41
если бы юзал раньше

kana
25.10.2017
19:17:21
это все равно не решение для пропсов, которые меняются

Дмитрий
25.10.2017
19:17:34
Там есть mergeProps
Третий параметр

Alex
25.10.2017
19:17:46

kana
25.10.2017
19:18:06
шарпера видно издалека

Alex
25.10.2017
19:18:34

Dmitry
25.10.2017
19:19:15

Alex
25.10.2017
19:19:53
как решить добавление / удаление я не понял, видимо онли полным ре-рендером

Google

Alex
25.10.2017
19:21:18
либо, 2 варианта, создавать контейнер каждый раз для добавленного элемента, а для удалённого, занулять значение или ставить флаг, чтобы сам элемент не рендерился

Дмитрий
25.10.2017
19:22:47
Четвёртым аргументом коннект принимает опции, в числе которых может быть собственная проверка на наличие изменений пропсов, стейта и merge по отдельности

Dmitry
25.10.2017
19:25:56
в теории ты должен в елемент только айди передать

Alex
25.10.2017
19:27:04
у меня есть элемент-список, рендерит список элементов, список подписан на переменную-массив с айдишниками, а элементы на элементы массива в стейте данных
речь о том, что будет перерендер элемента-списка
а это цикл по элементам, и суть в том, что добавив 1 элемент, придётся пройтись по всему списку
как я понял реакт оптимизирует всё дело и в дом уйдёт только diff, но проход по списку и проверка элементов на изменение тоже потребует время как и сравнение виртуального дома

Triple
25.10.2017
20:11:14
Есть какая-нибудь хорошая ui библиотека для реакта?

Irina
25.10.2017
20:12:23
semantic-ui

Triple
25.10.2017
20:15:09

Wise
25.10.2017
20:15:46
React semantic-ui :)

Irina
25.10.2017
20:16:16

David
25.10.2017
20:16:38

Triple
25.10.2017
20:16:55
Ant как-то по-приятнее....

Default
25.10.2017
20:17:04
Ант?
Уахахахха