
Art
10.12.2017
17:21:18
синтаксический сахар
?

Тимофей
10.12.2017
17:21:24
но если писать как я написал, то экшены и так оборачиваются в диспач

Art
10.12.2017
17:21:29
и все

Google

Art
10.12.2017
17:23:01

Rafael
10.12.2017
17:24:27
синтаксический сахар
не совсем
// An alternative to bindActionCreators is to pass
// just the dispatch function down, but then your child component
// needs to import action creators and know about them.

Тимофей
10.12.2017
17:24:38
?
вот здесь вроде норм по-русски написано
https://github.com/rajdee/redux-in-russian/blob/master/docs/api/bindActionCreators.md

Art
10.12.2017
17:25:55

Rafael
10.12.2017
17:31:32
по большинству тюториалов на которые я натыкался такая схема нормальна: store => значение компоненты, update значения => action => AJAХ => update store, проблема в том что у меня AJAX занимает 200-500ms, как результат юзер кликает на галочку и с лагом в 200-500ms на нее ставится значение, что я делаю не так?

Andrey
10.12.2017
17:34:35

Тимофей
10.12.2017
17:35:49

Sergey
10.12.2017
17:36:15
если есть возможность изменить визуальное состояние галочки до ajax-запроса, то в action с, допустим, redux-thunk, можно от такого избавиться, вызывая dispatch нужных экшнов внутри текущего action
угу, я тоже имею в виду их

dima
10.12.2017
17:36:35

Rafael
10.12.2017
17:37:49
Спасибо всем

Google

Nikita
10.12.2017
17:41:06
Ребят как связать экшены и редюсеры в редакс-акт, в доке там и стор и экшены и редюсеры в одном файле?

Тимофей
10.12.2017
17:43:21

kana
10.12.2017
17:43:38
тоже вопроса не понял

Nikita
10.12.2017
17:44:05
Вообще не понимаю, как он работает

Тимофей
10.12.2017
17:44:33

Nikita
10.12.2017
17:45:09

kana
10.12.2017
17:45:16
в одном файле
export const action1 = createAction();
export const action2 = createAction();
в другом файле
import { action1, action2 }
export const reducer = createReducer({}, 0)
.on(action1, inc)
.on(action2, dec)

Nikita
10.12.2017
17:46:16

kana
10.12.2017
17:46:35
вопрос не понятен, что это меняет?

Nikita
10.12.2017
17:47:08

kana
10.12.2017
17:47:40
зачем все? Экспортируй те, которые в редьюсере используешь

Nikita
10.12.2017
17:49:07
мне сказали что должно быть пару редюсеров, но сам не смог придумать как это сделать
ладно, я тупой, хуйню спрашиваю сорян
пойду нормально разберусь с ducks


kana
10.12.2017
17:55:12
Ну некоторые редьюсеры можно генерировать
export const fetchUserRequest = createAction();
export const fetchUserSuccess = createAction(user => ({ user }));
export const fetchUser = () => async dispatch => {
dispatch(fetchUserRequest());
const user = await api.getUser();
dispatch(fetchUserSuccess(user));
};
// // Было:
// const isFetching = createReducer({}, false)
// .on(fetchUserRequest, () => true)
// .on(fetchUserSuccess, () => false);
const makeIsFetching = (requestAction, successAction) =>
createReducer({}, false)
.on(requestAction, () => true)
.on(successAction, () => false);
const entity = createReducer({}, null)
.on(fetchUserSuccess, ({ user }) => user);
export const user = combineReducers({
isFetching: makeIsFetching(fetchUserRequest, fetchUserSuccess),
entity
});

Тимофей
10.12.2017
17:56:46

kana
10.12.2017
17:57:40
да и в принципе многие редьюсеры для данных, которые получаются ассинхронно, можно генерировать, но я так делать не любил, потому что там получается оверконфигурабельность какая-то. Думаю, если так пойдет, то будущее будет за комбинаторами редьюсеров нежели за генераторами редьюсеров

Google

Тимофей
10.12.2017
17:57:43
export const fetchUserRequest = createAction();
export const fetchUserSuccess = createAction(user => ({ user }));
export const fetchUser = () => async dispatch => {
dispatch(fetchUserRequest());
const user = await api.getUser();
dispatch(fetchUserSuccess(user));
};
// // Было:
// const isFetching = createReducer({}, false)
// .on(fetchUserRequest, () => true)
// .on(fetchUserSuccess, () => false);
const makeIsFetching = (requestAction, successAction) =>
createReducer({}, false)
.on(requestAction, () => true)
.on(successAction, () => false);
const entity = createReducer({}, null)
.on(fetchUserSuccess, ({ user }) => user);
export const user = combineReducers({
isFetching: makeIsFetching(fetchUserRequest, fetchUserSuccess),
entity
});
А почему ты пишешь on а не просто объект?

kana
10.12.2017
17:58:11
1) так типизируется лучше (что я не использовал)
2) так чище выглядит

Nikita
10.12.2017
18:00:07
спасибо, то что надо

kana
10.12.2017
18:04:23
а это для примитивного редьюсера, а че делать в entity это вообще ад
вообще конечно я осознал сейчас, что селекторы обязаны генерировать из (или одновременно с//рядом с) редьюсерами
как в indux зеробиаса, но там была сильная завязка селекторов на структуру стора
мир полон противоречий и обмана

andretshurotshka?❄️кде
10.12.2017
18:15:47
как в ангуларе?)

Andrew
10.12.2017
18:17:34
Ребзи можете подсказать, почему Если внутри объекта написать:
foo: () => { this. ...} то всегда будет window, а если тоже самое внутри класса то уже будет экземпляр этого класса ?

Тимофей
10.12.2017
18:22:13

Andrew
10.12.2017
18:22:53
Почему это не объект ?

Andrew
10.12.2017
18:23:44
Разве он не создает свой контекст вызова?

Тимофей
10.12.2017
18:29:00

Andrew
10.12.2017
18:29:31

Duego
10.12.2017
18:33:12
А как в идее добавлить плагин для стайлид компонент?

Andrew
10.12.2017
18:34:20
У меня с ним веб шторм крашился

Cenator
10.12.2017
18:35:34
2) vscode-styled-components

Google

Petr
10.12.2017
18:36:39
Разве он не создает свой контекст вызова?
Нет не создает, это же стрелочная функция она ссылается на верхний контекст если без “use strict”
В первом случае верхний контекст это window или global
Во втором случае это class

Andrew
10.12.2017
18:37:44

Petr
10.12.2017
18:38:23
И в том случае если ты вызовешь этот метод через точку

Andrew
10.12.2017
18:40:04
Ну так да, у обычной функции свой this, а стрелочная берет внешний this. Просто логично что внешний this метода - это ее объект

Petr
10.12.2017
18:40:58
Нее, ты не понял this объявляется в момент вызова функции

Andrew
10.12.2017
18:42:24
Ну да, создание объекта никак не влияет на this

Petr
10.12.2017
18:49:11
А у стрелочной функции не объявляется контекст, она проста ссылается на внешний

Admin
ERROR: S client not available

Vladimir
10.12.2017
18:51:04
Ребят, вы как получаете данные в react ssr ? Пытаюсь получить данные через axios / fetch , но они не появляются в статике, не подскажите ?

kana
10.12.2017
18:51:23
когда мы пишем const x = { a: this }
x.a не будет ссылаться на x, это будет тот контекст, где мы далем const x =
аналогично и со стрелкой будет

Petr
10.12.2017
18:52:13

Andrew
10.12.2017
18:53:43

Cenator
10.12.2017
18:58:12

Duego
10.12.2017
18:59:29
Подскажите
как свг вставлять?

kana
10.12.2017
18:59:49
я люблю react-svg-loader

Duego
10.12.2017
19:00:02
И просто импортить?

kana
10.12.2017
19:00:13
он .svg файлы в реакт-компоненты преобразует во время сборки

Evjeni
10.12.2017
19:00:50
1) установить вскод
1) не ставить вскод ради плагина
2) зайти в Preferences -> Plugins -> Browse Repositories > Styled Components

Google

kana
10.12.2017
19:01:19
да
import MyIcon from “./my-icon.svg”
const MyButton = ({ children, ...props }) => (
<Button {…props}>
<MyIcon />
{children}
</Button>
);

Cenator
10.12.2017
19:01:20

Duego
10.12.2017
19:02:20

Evjeni
10.12.2017
19:03:08
Думаю в остальных ОС аналогично

Andrey
10.12.2017
19:38:09

Дмитрий
10.12.2017
19:39:18
Каким образом стейт меняется?

kana
10.12.2017
19:41:28
у формика есть проп, который позволяет их менять

Andrey
10.12.2017
19:41:31
Стейт меняется из другого компонтента - но стейт глобальный - и в этом компоненте доступен. Он меняеться 100% - как видно на видео: я там поставил те же значния - только не в форме - а в виде текста

kana
10.12.2017
19:41:37
но это будет сбрасывать все изменения

Andrey
10.12.2017
19:42:31
То есть я прыкаю между шагами слева - это должно перересывовывать компонент справа
Всё работает
КРОМЕ ФОРМ
Я уже и redux forms пробовал
И formik
Поведение аналогичное - так что явно не в формике дело - а в чём не могу разобраться весь вечер.

kana
10.12.2017
19:44:03
ты меня проигнорил что-ли?

Andrey
10.12.2017
19:44:37
А! Там булеан поставить - как у redux form - чтобы реренерил?