Китикет
Наверное это из-за homepage
wolfe
после экшена флаг переключается
Roman
а в стэйте хранить bool premiumUser и в зависимости от него делать рендер?
да, это я и имел в виду под "перезапускать экшн через cDU"
Roman
после экшена флаг переключается
получается что "если флаг поменялся" и "если мы раньше хотели что-то сделать что требовало этот флаг" то "теперь можно"
Roman
но все равно надо знать, что мы что-то хотели сделать - так как компонентов на странице может быть несколлько таких и какой конкретно вызвал оплату хз
Roman
ну вот да... пока что думаю
Roman
await payment() ?
ну payment - это процесс со своими компонентами и интерактивом
Roman
это типа не автономный процесс
wolfe
можно попробовать написать какой-то враппер над пулом премиум-экшенов, который будет запоминать, что хотел сделать юзер
Dartess
я даже мидлваром чет придумать не могу - у меня все равно разрыв в процессе в тот момент когда показывается форма оплаты
В миддлваре проверять, не затребовано ли премиум действие не премиум юзером. Если так, запомнить его, например, через замыкание, не пускать его дальше, вместо этого отдиспатчить что-то, что откроет процесс оплаты. Если процесс оплаты успешен, ловить это в миддлваре, и если есть запомненное выше действие, запускать его.
Roman
можно попробовать написать какой-то враппер над пулом премиум-экшенов, который будет запоминать, что хотел сделать юзер
ага, это я назвал "при старте процесса сохранять в стейт "название" этого процесса и хранить маппинги"
Alexey
ну payment - это процесс со своими компонентами и интерактивом
он показыват окошко, принимает данные, отправляет, получает от сервера ответ (promise) и отдаёт его наружу ?
Roman
он показыват окошко, принимает данные, отправляет, получает от сервера ответ (promise) и отдаёт его наружу ?
результатом работы действия является окошко, результатом нажатия на кнопку в окошке является изначальное действие
Dartess
так пажжи пажжи, вот action идет. попал в middleware, отдиспатчилось что-то и показалась менюшка, которая опять по нажатию что-то отдиспачила, как я попаду в то замыкание?
У тебя заново запустится миддварь. Выше просто объявишь переменную с lastPremiumAction. Она будет доступна через замыкание разным вызовам миддлвара.
wolfe
так пажжи пажжи, вот action идет. попал в middleware, отдиспатчилось что-то и показалась менюшка, которая опять по нажатию что-то отдиспачила, как я попаду в то замыкание?
добавь флаг isPremiumAction, пусть мидлваря складывает их в массив. потом задиспатчишь, после определенного типа экшена
Roman
ну это получается какбы "state outside of state"
Roman
то есть типа хранилище, которое не является редаксом
Roman
но вообще кто сказал, что это надо хранить в редаксе
Alexey
а если я нажму на экшн за 5 рублей, и пока не оплатил заменю в массиве на экшн за 500 рублей
Roman
это все фронтовые свистелки-перделки
Dartess
Ну храни в редаксе, если у тебя моральный запрет хранить состояние в замыкании миддлвара) так действительно нагляднее будет. Вместо той самой переменной можно действительно просто хранить экшн в редаксе.
Dartess
Почему функцию? Объект экшн.
Roman
ну это только для синхронных, а если это thunk
wolfe
ну это только для синхронных, а если это thunk
они же тоже после thunk-middleware будут объектами
Roman
нее так это они "когда-нибудь" будут
Oleg
как сделать useReducer и initialState зависимым от пропсов? написал так, но явно есть способ лучше и легче. useReducer(reducer, () => initialState(props.formData));
Eugene
action: state.action 🌚 if( action === LOL_KEK) {}
Eugene
нет
Dartess
ну это только для синхронных, а если это thunk
Ну тогда храни в замыкании ссылку на санку х) я пока не вижу других решений без костылей с флагами, сорри
Roman
та да
Roman
ну короч пацаны, спасибо за варианты - подумаю
Eugene
🤔а если в компонент через mstp передать action - то при каждом новом диспатче будет ререндер?
Roman
Привет. Есть смысл использовать Redux? Или лучше использовать React.Context?
Roman
Roman
но в целом была статья недавно где-то "как я переписал приложение с редакса на контекст и мое приложение стало в 100 раз медленней"
Rrr
Привет. Есть смысл использовать Redux? Или лучше использовать React.Context?
зависит от задач и насколько большим планируется приложение
Eugene
Лучше ридакс
релакс тоже не плохо
Roman
Хорошо, всем спасибо за ответы
Dmitry
У нас лям контекстов
Roman
Если могешь скинь статью
https://blog.theodo.com/2019/07/how-i-ruined-my-application-performances-by-using-react-context-instead-of-redux/
Roman
там речь о том, что без селекторов все плохо
Dmitry
Ну по сути то почему медленнее? Если провайдер не ререндерится и через эмитер диспатчит
Dmitry
там речь о том, что без селекторов все плохо
У него один контекст как стор?
Sergiy
всем привет. Вопрос по реакту: как сделать компонент со списком ( ul>li ) и передавать через props количество li? чтобы потом, когда используеться компонент - можно присвоить этому пропсу например 5 и сгенерируеться 5 тегов li? Надеюсь доступно обьяснил)
Dmitry
У него один контекст как стор?
Тогда конечно. У нас провайдеры на стейт разные Из-за этого не будет все ререндерить
Dmitry
И реселект становится не нужным
Sergiy
я уже нашёл решение, спасибо
Andrey
Array.from({length: prop}).map()
Можно в from вторым аргументом передать функцию, которая будет мапить
Bogdan
вот так разве можно делать? типо в setState вызывать метод из пропсов?
Віталій
вот так разве можно делать? типо в setState вызывать метод из пропсов?
ну тут как бы он сразу вызывается, не дожидаясь изменения стейта а вообще выглядит коряво
Mihail
там колбек передан
Mihail
а, он вызван
Mihail
сорри
Mihail
тогда да
Bogdan
ну тут как бы он сразу вызывается, не дожидаясь изменения стейта а вообще выглядит коряво
ну если написать его выше setState, то он тоже выполнится сразу, я вот первый раз настолько чудесный вариант вижу
Віталій
ну если написать его выше setState, то он тоже выполнится сразу, я вот первый раз настолько чудесный вариант вижу
this.setState({ ... }, callback); то есть два варианта: 1) this.setState({ ... }, () => this.props.modalClosed()); 2) this.setState({ ... }, this.props.modalClosed); Но мне все равно кажется что что-то тут не так. Цель какая?
Віталій
:D