
Sergey
05.05.2016
19:21:35
собрать все возможные комбинации в классы, я так понимаю?

Aleksey
05.05.2016
19:21:45
Это же дешевле через classnames делать
И еще – как импортировать переменные? (cssnext) Через @value плагин?

Google

Aleksey
05.05.2016
19:26:22
Других способов нет?
Я об этом: https://github.com/css-modules/postcss-modules-values

from
05.05.2016
19:29:54

Aleksey
05.05.2016
19:32:05

from
05.05.2016
19:32:42
ну первоочередная проблема-то в изолировании имён, а композиция — так, плюшки)

Aleksey
05.05.2016
19:35:09
Хорошо, имена изолировали, как быть с переменными?
https://github.com/css-modules/postcss-modules-values
Так?

from
05.05.2016
19:38:43
а сейчас как импортируешь? через @import?

Aleksey
05.05.2016
19:40:37
Сейчас sass, хочу изолировать переменные.
Не найду информации как импортировать правильно перменные из cssnext: https://github.com/MadLittleMods/postcss-css-variables
(только через @import "./vars.css")

from
05.05.2016
19:47:31

Aleksey
05.05.2016
19:48:45
Хочу import red as someprefix-red from colors

Google

vitaliy
05.05.2016
19:48:53
Где можно нормальный date range найти?

Aleksey
05.05.2016
19:49:12
Этот плагин как раз такое и позволяет.

from
05.05.2016
19:50:16

Aleksey
05.05.2016
19:54:31

Ivan
05.05.2016
19:55:34
Где можно нормальный date range найти?
Попробуй этот - довольно гибкий календарь
https://github.com/gpbl/react-day-picker
Вот пример для диапазона дат
http://www.gpbl.org/react-day-picker/examples/#range

vitaliy
05.05.2016
19:57:14
ага, вроде что нужно, спасибо

Антон
05.05.2016
20:24:31
Коллеги, кто знает как тестировать компоненты, обернутые в react-router? Mocha, поднимаем в phantomJS

Nikita
05.05.2016
20:27:30
history фейковый подсунуть

Sergey
05.05.2016
20:28:35
const history = createMemoryHistory(location);

Alexander
05.05.2016
20:33:34
Бля, я уж думал
Увидел имя Sergey, решил, что это @chicoxyzzy пьяный с набережной вещает

Sergey
05.05.2016
20:36:31
?

Антон
05.05.2016
20:36:53
?
А в тестах оборачивать в роутинг?

Alexander
05.05.2016
21:12:53
BeerJS официально самая крупная конференция разработчиков в стране.
Реакт ты можешь и не знать, но BeerJS'ом быть обязан

S
05.05.2016
21:22:00
а в каком случае данные нужно хранить в редаксе, а в каком нет?

Антон
05.05.2016
21:22:47
Конкретизируй =)

S
05.05.2016
21:25:58
я с коллегами прочитал мануал по редаксу и нашел там типа такие штуки:
dispatch({
type: 'LOAD_POSTS_REQUEST',
userId
})
теперь у нас каждая фича выглядит монструозно, с кучей редьюсеров и экшенов. Вопрос, зачем писать экшены и редьюсеры, если например данные по загрузке нужны только внутри компонента (показать спиннер)

Sergey
05.05.2016
21:28:25
для соблюдения основного смысла единого стейта и тестирования
нет смысла использовать редакс, если вы считаете что он не нужен

Google

Nikita
05.05.2016
21:28:36
у меня тоже был такой вопрос, когда начинал редакс изучать
это полезно с разных точек зрения

S
05.05.2016
21:28:51
ну я действительно считаю, что это ооочень замедляет разработку

Nikita
05.05.2016
21:29:03
например если интернет отвалится - у пользователя будет доступен старый контент

Sergey
05.05.2016
21:29:15
зато упрощает поддержку :)

S
05.05.2016
21:29:21
компоненты хер пойми зачем шарят данные в стейти нужные только им самим

Nikita
05.05.2016
21:29:37
надо просто мозги немного в другую сторону повернуть

S
05.05.2016
21:29:50

Nikita
05.05.2016
21:30:24
через 2-3 итерации это будет монстр, а не компонент

S
05.05.2016
21:30:29

Nikita
05.05.2016
21:30:42
ну только что назвал тебе плюс

S
05.05.2016
21:30:52
почему монстр?

Nikita
05.05.2016
21:31:19
ну потому что у тебя компонент-контроллер становится здоровенный
появляются неявные зависимости

S
05.05.2016
21:31:32
контроллер - это бизнес-логика

Sergey
05.05.2016
21:31:32
данные фетчатся каждый раз при маунте компонента? а что если потребуется два таких на странице?

S
05.05.2016
21:31:57

Nikita
05.05.2016
21:32:30
не
с флаксом тоже самое
тут смысл в том, что данные отдельно, вью отдельно

Google

Nikita
05.05.2016
21:33:09
особенно с точки зрения тестирования
ты сможешь получить компонент в любом состоянии с минимумом магии если все проходит цикл флакса/редакса

S
05.05.2016
21:33:38
ну а как всякие material-ui тестируются

Nikita
05.05.2016
21:34:44
внутри ui иметь стейт на мой взгляд норм

S
05.05.2016
21:35:09
т.е. только бизнес-логика должна лежать в сторе, верно?

Nikita
05.05.2016
21:35:12
не вижу много бойлепрейт кода
сделай себе миддлвары/экшн генераторы

Admin
ERROR: S client not available

Sergey
05.05.2016
21:35:38
бизнес логику лучше в мидлвейры или в саги (если используются)

Nikita
05.05.2016
21:35:39
которые будут кидать pending состояния сами
у меня редьюсеры сами обрабатывают ошибки и пендинги
остается только в реакте их рендрить

S
05.05.2016
21:36:31

Nikita
05.05.2016
21:36:49
я имею ввиду я сам не пишу return {...state, penging: true}
за меня это делает небольшая обертка, которую я написал 1 раз

S
05.05.2016
21:37:15
у тебя pending один на все приложение?

Nikita
05.05.2016
21:39:28
нет конечно
на 1 редьюсер
редьюсеры можно друг в друга вкладывать

Google

S
05.05.2016
21:40:22
а можешь поподробнее написать?

Nikita
05.05.2016
21:41:14
function createReducer(initialState, actionHandlers) {
return (state = initialState, { type, payload, error, meta }) => {
const handler = actionHandlers[type];
if (!handler) {
return state;
}
if (error) {
return {
...state,
error: payload,
pending: false
};
}
if (meta) {
if (meta.pending) {
return {
...state,
pending: true,
error: false
};
}
}
return {
...state,
error: false,
...handler(payload, state, meta),
pending: false
};
};
}
export default createReducer;
const user = createReducer({
authorized: false,
registerPassed: false,
form: {}
}, {
[USER_LOGIN]: onLogin,
[USER_LOGOUT]: onLogout,
[USER_REGISTER]: onRegister,
[USER_DESTROY]: onLogout,
[USER_FETCH]: onFetch,
[USER_UPDATE]: onFetch
});


S
05.05.2016
21:55:09
function createReducer(initialState, actionHandlers) {
return (state = initialState, { type, payload, error, meta }) => {
const handler = actionHandlers[type];
if (!handler) {
return state;
}
if (error) {
return {
...state,
error: payload,
pending: false
};
}
if (meta) {
if (meta.pending) {
return {
...state,
pending: true,
error: false
};
}
}
return {
...state,
error: false,
...handler(payload, state, meta),
pending: false
};
};
}
export default createReducer;
а meta.pending в middlewares ставится/снимается?
function createReducer(initialState, actionHandlers) {
return (state = initialState, { type, payload, error, meta }) => {
const handler = actionHandlers[type];
if (!handler) {
return state;
}
if (error) {
return {
...state,
error: payload,
pending: false
};
}
if (meta) {
if (meta.pending) {
return {
...state,
pending: true,
error: false
};
}
}
return {
...state,
error: false,
...handler(payload, state, meta),
pending: false
};
};
}
export default createReducer;
блин, почему то у меня до сих пор была логика switch/case type, матчится на другие вещи в action не думал


Denis
05.05.2016
22:37:55
Парни, а кто чем логирование на клиенте и сервере реализует? Есть альтернативы bunyan?

Dmitrii
05.05.2016
22:40:15
я логгер изоморфный писал год назад гдето
для изоморфногореакт аппа

Denis
05.05.2016
22:40:36
а я два
но у решений типа bunyan есть плюсы
можно из коробки подключать разные коннекторы

Dmitrii
05.05.2016
22:41:08
но им только на сервере же

Denis
05.05.2016
22:41:26
изоморфно же :)

Dmitrii
05.05.2016
22:41:35
что-то поменялось значит :)
я на https://github.com/brophdawg11/JsChannels
запилил.. и канал открывал client->server или server->server

Denis
05.05.2016
22:43:37
)

Dmitrii
05.05.2016
22:44:12
а воще еси bunyan с клиента писать может то больше ничего не нужно
на другом конце можно разные ридеры втыкать и редиректить
в splunk или куда угодно