@react_js

Страница 2102 из 5115
Maksim
06.09.2017
11:32:29
че там заглядывать, у тебя эксперимент не правильный, ты setState асинхронно по отношению к рендеру вызываешь

localvoid
06.09.2017
11:33:24
но ведь setState асинхронный, почему он в этом примере вдруг синхронный? )

Maksim
06.09.2017
11:35:04
ты лучше расскажи зачем в setTimeout оборачивал

localvoid
06.09.2017
11:36:11
какая разница, ты ведь там рассказывал про event loop и прочее что ничего общего к setState в реакте<16 не имеет

Google
localvoid
06.09.2017
11:37:43
клик будет в контексте планировщика задач реакта, тк это синтетический эвент реактовый

localvoid
06.09.2017
11:38:35
а setTimeout не будет внутри планировщика задач

поэтому в нём setState будет синхронным

Maksim
06.09.2017
11:38:57
епта, ну это уже перебор

я сдаюсь

Jake
06.09.2017
11:41:42
Ио всем

Как мне замокать диспатчер в actions вот в таком вот коде addTodo(text) { axios({ method: 'POST', url: 'http://localhost:3001/todos', data: { text: text, status: false } }) .then((response) => { TodoDispatcher.dispatch({ type: TodoActionTypes.ADD_TODO, payload: response, text, }); }) },

Jake
06.09.2017
11:42:56
?

Vadim
06.09.2017
11:45:56
Люди! У меня вопрос по recompose. Как сделать так что б handler, заданный в “withHandlers” не генерировался каждый раз при его вызове?

Google
Vadim
06.09.2017
11:46:28
Делаю как в документации, но если проставить консоль лог, становится видно что он генерируется каждый раз по-новой

Denis
06.09.2017
11:46:30
?
Мокать аксиос ??

Jake
06.09.2017
11:47:09
нет я аксиос замокал а вот до диспатча не могу добраться

@testarossa

Vadim
06.09.2017
11:48:34
withHandlers({ handlerName: (props) => { console.log(‘handlerName’) // <— вот этот вот консоль лог вызывается каждый раз return (event) => { … } } })

Это говорит о том, что возвращаемый хандлер генерируется каждый раз по-новой

Как этого избежать?

Denis
06.09.2017
11:49:51
@testarossa
Не диспач нужно мокать а стор

То есть смотреть как он изменился после диспатча

Vadim
06.09.2017
11:51:29
Или тут народ над этим не парится, и то, что код хандлера генерируется каждый раз при его вызове это для пользователей recompose норма?

Jake
06.09.2017
11:52:15
@testarossa аа просто замокать стор и запустить диспатч?

Vadim
06.09.2017
11:53:55
Норма, просто не ререндери лишний раз
Странный совет ) Допустим у меня вообще рендерится какая-то анимация или, скажем, счетчик постоянно обновляется. Зачем при этом мне перегенерировать код хэндлеров при каждом рендеринге?

Denis
06.09.2017
11:54:36
Ну юзай класс

Vadim
06.09.2017
11:55:12
Я правильно понимаю, что при использовании recompose это неизбежно?

Denis
06.09.2017
11:55:48
Смотри у меня есть функция

Я хочу чтобы она не вызывалась каждый раз

Что мне делать ?

Правильно ли я понимаю что при использовании джс вызывать функцию при ее вызове это неизбежно ?

Google
Vadim
06.09.2017
11:57:06
Что мне делать ?
В случае с recompose не знаю

Вопрос именно про использование recompose

Denis
06.09.2017
11:57:48
Один хер

Не хочешь вызывать - не вызывай Не хочешь пересоздания - не ререндери

sCU бог для чего вам дал

Vadim
06.09.2017
11:59:35
Не хочешь вызывать - не вызывай Не хочешь пересоздания - не ререндери
Вот я и спрашиваю, в случае с recompose пересоздание кода обработчиков это неизбежность при каждом рендеринге?

Denis
06.09.2017
12:00:11
Всё верно

Vadim
06.09.2017
12:00:19
ок.

Спасибо!

Тогда выигрыш от использования recompose становится не очень-то очевидным ))

Denis
06.09.2017
12:01:09
Ну в случае консоль лога, ты можешь вынести функцию на уровень выше

Тогда выигрыш от использования recompose становится не очень-то очевидным ))
Пересоздания отбирает ничтожно малое количество времени относительно ререндера

Max
06.09.2017
12:04:04
при рендере компонента или при генерации компонента?

Vadim
06.09.2017
12:04:46
каждый раз это сколько?
Например при каждом обновлении счетчика, размещенного на странице, и меняющегося несколько раз в секунду

Max
06.09.2017
12:05:40
странно

withHandlers<InnerProps, OuterProps>({ [fetchAndSet]: (props: OuterProps & { [propName: string]: any }) => async () => { const obj = await fetchCallback(props) props[setName](obj, () => props[setNameLoaded](true)) }, }),

вот у меня вот это говно вызывается только когда я вызываю fetchAndSet

передавай обьект а не фабрику

Google
Vadim
06.09.2017
12:06:44
Для проверки

Max
06.09.2017
12:07:01
а я вижу уже разницу

еще раз говорю — у меня обьект передается

у тебя фабрика

Vadim
06.09.2017
12:07:34
Я с фабрикой пока вообще не связывался

У меня объект

Max
06.09.2017
12:07:50
{ console.log(‘handlerName’) // <— вот этот вот консоль лог вызывается каждый раз return (event) => { … }

вот это что?

у тебя фабрика здесь

Admin
ERROR: S client not available

Vadim
06.09.2017
12:08:18
Тогда и у тебя фабрика

withHandlers( handlerCreators: { [handlerName: string]: (props: Object) => Function } )

У меня это

И у тебя оно

Max
06.09.2017
12:09:29
а

слушай да

[fetchAndSet]: (props: OuterProps & { [propName: string]: any }) => async () => {

ну тогда мне похуй ?

Vadim
06.09.2017
12:10:06
Это потому что у тебя частого рендеринга нет )

Google
Max
06.09.2017
12:10:16
чувак

ну если у меня будут проблемы скорости из-за того что где-то функция перегенерируется

то значит я явно накосячил с архитектурой )

в pure оберни чтоли )

хендер таки можно вынести

const handler = ()=> … и потом return handler

но вообще странно

Vadim
06.09.2017
12:13:22
хендер таки можно вынести
Это да. Можно вынести вовне. Я просто думал что я просто пока что-то не понял в recompose. Ибо у них в документации сказано что withHandlers как-раз и создан для того что б хэндлеры не перегенерировались

Max
06.09.2017
12:13:53
https://github.com/acdlite/recompose/blob/master/src/packages/recompose/withHandlers.js

чот хуйня какая-то

кеш есть

у тебя точно там анмаунта нет?

Vadim
06.09.2017
12:15:01
В компоненте нет

Max
06.09.2017
12:15:08
а выше

Vadim
06.09.2017
12:15:15
Но ок, покопаюсь поглобальнее

Max
06.09.2017
12:15:33
componentWillReceiveProps() { this.cachedHandlers = {} }

хм

ужс

хотя логично

если хендлеры что-то с пропсами делают

Vadim
06.09.2017
12:33:47
Все понял! Там выше по уровню у меня стоит withState. И каждый хандлер, прописанный в блоке withHandlers, который находится ниже по уровню чем withState, перегенерируется каждый раз при вызове

Если был изменен стейт конечно

Содержимое же блоков withHandlers, которые находятся выше чем прописан withState, не перегенерируется после смены стейтов

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