
Andrey
16.10.2017
15:46:00

Andrey
16.10.2017
15:46:27
Умно.

Evgeny
16.10.2017
15:47:17
как такую тему с помощью bindActionCreators написать?
dispatch => ({
openAccountPopup: () => {dispatch(openPopup('account'))},
})

Google

Сергей
16.10.2017
15:47:51

Юра
16.10.2017
15:48:19
bindActionCreators({
openAccountPopup: () => openPopup('account')
}, dispatch);

Enjoy the
16.10.2017
15:49:16
Бля че реакт 16 хуево совмещается или че? Я думал проблем не будет

Сергей
16.10.2017
15:49:32
другие либы тоже существуют
а некоторые любят лезть в кишки реакта

Юра
16.10.2017
15:49:47

Evgeny
16.10.2017
15:49:50
улет, спс

Enjoy the
16.10.2017
15:50:01

Cenator
16.10.2017
15:50:25

Max
16.10.2017
15:50:42
да
у меня автоимпорт

Cenator
16.10.2017
15:52:19

Google

Max
16.10.2017
15:52:33
тьфу
автогенерация
и там стоит import react
а лезть менять лень

Сергей
16.10.2017
15:54:00
Эт как?
ну ты пишешь имя компонента или константы, плагин лазает по проекту и предлагает тебе пути в подсказке
жмякаешь tab и импорт улетает вверх

Max
16.10.2017
15:54:11
да, автоимпорт так работает

Cenator
16.10.2017
15:56:44

Сергей
16.10.2017
15:56:57

Max
16.10.2017
15:56:59
Сможет

Сергей
16.10.2017
15:57:00
у меня сниппет
есть вероятность что сделает две строки импортов


Сергей
16.10.2017
16:54:49
dudes, подскажите, а то я сейчас уже мозг сломаю.
Есть react и mobx. Хочу декоратор, который будет инжектить стор и следить за его готовностью. Если стор готов - рендерит компонент, если не готов, то рендерит лоадер.
То есть примерно так:
const store1 = observable({
isReady: false,
someRemoteData: null,
loadData: action(() => this.isReady = true)
})
const store2 = observable({
isReady: true,
})
const subscribe = (...storeNames) => Component => {
const ObservingComponent = observer(Component)
const LoadingWrapper = props => {
const isReady = every(storeNames, storeName => props[storeName].isReady)
return isReady ? <ObservingComponent {...props} /> : <Loading />
}
return inject(...storeNames)(observer(LoadingWrapper))
}
const MyComponent = subscribe("store1", "store2")(({ store1 }) => store1.someRemoteData)
Вот в такой форме это нормально не работает
А как сделать такое правильно?

Max
16.10.2017
16:55:19
recompose branch

Сергей
16.10.2017
16:55:38
так?
ну то есть я знаю что это такое, но чем это поможет?

Max
16.10.2017
16:56:01
ну у тебя же в пропсах передается стор?
(я мобх давно тыкал, не помню)

Сергей
16.10.2017
16:56:37
ну я более-менее завершенный код привел

Google

Сергей
16.10.2017
16:56:46
ты идею объясни ?

Max
16.10.2017
16:57:31
compose(
inject(…),
branch((props) => !props.store1, <Loading />)
)(YourComponent)
вместо props.store1 подставь что там тебе надо мониторить для “готовности”

Сергей
16.10.2017
16:58:20
Я вижу основую проблему того что я написал в том что если в store1 вдруг произойдет изменение isReady = false; someRemoteDate = null, то тогда сначала отрендерится (с ошибкой возможно) MyComponent, а уже потом, если повезет сработает LoadingWrapepr
Ну ты просто написал то же самое что и я, только короче ?

Max
16.10.2017
16:58:44
ну мне лень читать твою портянку )

Сергей
16.10.2017
16:58:57
тогда мой вопрос не будет понятен ?

Max
16.10.2017
16:59:02

Сергей
16.10.2017
16:59:08
Да не
смотри
если я правильно понимаю mobx
то если у нас есть дерево компонент и они все объявлены как observer, мобх пытается их ререндерить от самого глубокого

Max
16.10.2017
16:59:52
тогда я пас )
но это

Сергей
16.10.2017
17:00:16
поэтому как бы я не написал этот бранчинг, мне либо придется проверять в каждом компоненте готовность стора (чего я не хочу, затем мне этот декоратор и нужен), либо я хз
ну, либо не передавать в компоненты обсерваблы

Max
16.10.2017
17:00:32
нуууу
вариант

Сергей
16.10.2017
17:00:47
так нет же

Max
16.10.2017
17:00:48
а можно так?

Google

Сергей
16.10.2017
17:00:55
тогда мобх не нужен =)

Max
16.10.2017
17:01:01
compose(
inject
observable
branch
)?

Сергей
16.10.2017
17:01:11
ну это ты начинаешь гадать уже ?

Max
16.10.2017
17:01:21
я не гадаю, я спросил)

Сергей
16.10.2017
17:01:40
так, дай сообразить что ты предлагаешь

Admin
ERROR: S client not available

Сергей
16.10.2017
17:01:58
ты предлагаешь сделать HOC обзерваблом?
это как вообще ?
так можно?

Max
16.10.2017
17:02:18
нет, я предлагаю поверх бранча навернуть обсервабле
не знаю позволит ли магия мобх это сделать

Сергей
16.10.2017
17:02:56
брр
ничего не понимаю..

Max
16.10.2017
17:03:41
так
кто тут за мобх топил
щас засаммоним
Алексей


Алексей
16.10.2017
17:51:47
dudes, подскажите, а то я сейчас уже мозг сломаю.
Есть react и mobx. Хочу декоратор, который будет инжектить стор и следить за его готовностью. Если стор готов - рендерит компонент, если не готов, то рендерит лоадер.
То есть примерно так:
const store1 = observable({
isReady: false,
someRemoteData: null,
loadData: action(() => this.isReady = true)
})
const store2 = observable({
isReady: true,
})
const subscribe = (...storeNames) => Component => {
const ObservingComponent = observer(Component)
const LoadingWrapper = props => {
const isReady = every(storeNames, storeName => props[storeName].isReady)
return isReady ? <ObservingComponent {...props} /> : <Loading />
}
return inject(...storeNames)(observer(LoadingWrapper))
}
const MyComponent = subscribe("store1", "store2")(({ store1 }) => store1.someRemoteData)
Да вроде нормально всё должно работать. Обзёрверу вообще должно быть пофиг. Да и LoadingWrapper тоже обзёрвер, так что он должен на изменения isReady подписаться
А стоп.


Сергей
16.10.2017
17:53:43
Он подписывается. Но насколько я понимаю проблему - пусть вдруг isReady = false и someRemoteData = null. Были и пропали. Тогда сначала ререндерится конечный компонент, нервничает из-за того что someRemoteData куда-то делся, плюется эксепшенами, а уже только потом (если доживем до этого) ререндерится LoadingWrapper, который должен этот компонент скрыть

Google

Сергей
16.10.2017
17:54:07
Я могу спросить иначе. Хер с ним с моим решением и кодом. Как сделать то что я хочу? ?
Повторю постановку задачи — пусть у меня есть сторы с интерфейсом isReady.
Хочется оборачивать любые компоненты в некий декоратор, который этот isready проверяет и если нет, то вместо компонента я вижу Loading

Алексей
16.10.2017
17:54:57
Не, он не должен эксепшенами сыпать.

Сергей
16.10.2017
17:54:58
Так, чтобы внутри компонента об этом думать не пришлось

Алексей
16.10.2017
17:55:26
const MyComponent = subscribe("store1", "store2")(({ store1 }) => store1.someRemoteData)
вот что меня смущает
а точнее то, что компонент возвращает непонятный store1.someRemoteData

Сергей
16.10.2017
17:56:02
да не
это я просто недописал псевдокод

Алексей
16.10.2017
17:56:15
во первых, если я не ошибаюсь, компоненты-функции не могут возвращать null
а

Сергей
16.10.2017
17:56:23
имеется в виду что компонент обращается к observable значению
там конечно типа => <div>{store1.someRemoteData}</div>

Алексей
16.10.2017
17:56:49
ну если обращается, то по идее будет подписка
то есть он всегд к isReady обращается и подписан