Size: a a a

2020 November 05

🦜

🦜 in ☄️ effector
Марк Эриксон рассказал о том, в каких случаях Redux не самое лучшее решение — "When (and when not) to reach for Redux".

Redux появился в 2015 году и был очень популярен несколько лет, но сейчас это не самый лучший инструмент. Вопрос кэширования данных взяли на себя библиотеки swr, React Query, Apollo. Проблемы с явной передачей пропсов от корня к дочерним компонентам (props drilling) решается в React из коробки, начиная с версии 16.3, благодаря стабилизировавшемуся Context API. Также Марк говорит о том, что Redux неоптимален для работы со стейтом, но не приводит альтернатив, поэтому позволю себе наглость добавить их от себя: Mobx, Reatom, Effector.

Несмотря на свой статус основного мейнтейнера Redux Марк довольно трезво оценивает текущую ситуацию с Redux и говорит о том, что серебряной пули нет, инструменты нужно выбирать в зависимости от ситуации. В некоторых случаях подходящим решением может быть Redux.

#react #statemanagement

https://changelog.com/posts/when-and-when-not-to-reach-for-redux
источник

OR

Oleg Rizhkov in ☄️ effector
🦜
Марк Эриксон рассказал о том, в каких случаях Redux не самое лучшее решение — "When (and when not) to reach for Redux".

Redux появился в 2015 году и был очень популярен несколько лет, но сейчас это не самый лучший инструмент. Вопрос кэширования данных взяли на себя библиотеки swr, React Query, Apollo. Проблемы с явной передачей пропсов от корня к дочерним компонентам (props drilling) решается в React из коробки, начиная с версии 16.3, благодаря стабилизировавшемуся Context API. Также Марк говорит о том, что Redux неоптимален для работы со стейтом, но не приводит альтернатив, поэтому позволю себе наглость добавить их от себя: Mobx, Reatom, Effector.

Несмотря на свой статус основного мейнтейнера Redux Марк довольно трезво оценивает текущую ситуацию с Redux и говорит о том, что серебряной пули нет, инструменты нужно выбирать в зависимости от ситуации. В некоторых случаях подходящим решением может быть Redux.

#react #statemanagement

https://changelog.com/posts/when-and-when-not-to-reach-for-redux
в некоторых... интересно, в каких.
источник

m

mg901 in ☄️ effector
it('should return a message in case of unsuccessful registration', async () => {
   const expected = {
     errors: {
       'email or password': ['is invalid'],
     },
   };

   signUpFx(() => Promise.reject(expected));
   const scope = fork(root);
   await allSettled(signUpFx, { scope });
   expect(scope.getState($errors)).toMatchObject(expected);
 });
тестирую rejected эффекты. Ожидаю заполнение стора $errors объектом ошибки, но получаю пустой объект. Что я делаю не так?
источник

YL

Yan👀 Lobaty in ☄️ effector
mg901
it('should return a message in case of unsuccessful registration', async () => {
   const expected = {
     errors: {
       'email or password': ['is invalid'],
     },
   };

   signUpFx(() => Promise.reject(expected));
   const scope = fork(root);
   await allSettled(signUpFx, { scope });
   expect(scope.getState($errors)).toMatchObject(expected);
 });
тестирую rejected эффекты. Ожидаю заполнение стора $errors объектом ошибки, но получаю пустой объект. Что я делаю не так?
проверь экспектами сначала с чем эффект завершился
источник

DS

Dmitriy Shuleshov in ☄️ effector
mg901
it('should return a message in case of unsuccessful registration', async () => {
   const expected = {
     errors: {
       'email or password': ['is invalid'],
     },
   };

   signUpFx(() => Promise.reject(expected));
   const scope = fork(root);
   await allSettled(signUpFx, { scope });
   expect(scope.getState($errors)).toMatchObject(expected);
 });
тестирую rejected эффекты. Ожидаю заполнение стора $errors объектом ошибки, но получаю пустой объект. Что я делаю не так?
signUpFx(() => Promise.reject(expected))

А шо это за конструкция такая?
источник

YL

Yan👀 Lobaty in ☄️ effector
кстати да ты use забыл))
источник

🦜

🦜 in ☄️ effector
Dmitriy Shuleshov
signUpFx(() => Promise.reject(expected))

А шо это за конструкция такая?
обычная
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
signUpFx(() => Promise.reject(expected))

А шо это за конструкция такая?
проект без типов по ходу) раз получилось передать функцию
источник

m

mg901 in ☄️ effector
🚀🔬 🚀🔬🚀🔬
проект без типов по ходу) раз получилось передать функцию
это real world. нет типов в тестах
источник

m

mg901 in ☄️ effector
Yan👀 Lobaty
кстати да ты use забыл))
c use та же история.
it('should return a message in case of unsuccessful registration', async () => {
   const expected = {
     errors: {
       'email or password': ['is invalid'],
     },
   };

   signUpFx.use(() => Promise.reject(expected));

   const scope = fork(root);
   await allSettled(signUpFx, { scope });
   expect(scope.getState($errors)).toMatchObject(expected);
 });
источник

OR

Oleg Rizhkov in ☄️ effector
напомните, пожалуйста, какой метод нужен для того, чтобы вызвать effect с аргументами через пустой event?
export const answerSubmitted = createEvent<void>()
const submitAnswerFx = createEffect<NextQuestion, any, AxiosError>()
submitAnswerFx.use(api.nextQuestion)

forward({
 from: answerSubmitted,
 to: submitAnswerFx,
})
источник

MK

Mihail Kuzmin in ☄️ effector
answerSubmitted.map(() => че хочешь) ?
источник

OR

Oleg Rizhkov in ☄️ effector
Mihail Kuzmin
answerSubmitted.map(() => че хочешь) ?
ну в мапе я не достану же.
источник

MK

Mihail Kuzmin in ☄️ effector
Oleg Rizhkov
ну в мапе я не достану же.
ну в твоем сообщении никаких сторов не было
источник

MK

Mihail Kuzmin in ☄️ effector
это ты на ходу уже редактируешь задачу
источник

MK

Mihail Kuzmin in ☄️ effector
если из стора хочешь достать, то sample
источник

R

Rafael 🦠 in ☄️ effector
Oleg Rizhkov
напомните, пожалуйста, какой метод нужен для того, чтобы вызвать effect с аргументами через пустой event?
export const answerSubmitted = createEvent<void>()
const submitAnswerFx = createEffect<NextQuestion, any, AxiosError>()
submitAnswerFx.use(api.nextQuestion)

forward({
 from: answerSubmitted,
 to: submitAnswerFx,
})
sample вместо форварда
источник

R

Rafael 🦠 in ☄️ effector
там fn: () => undefined
источник

DS

Dmitriy Shuleshov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
проект без типов по ходу) раз получилось передать функцию
Я бы сказал что это, скорее, следствие присутствия типов во всей части проекта кроме этой
источник

IA

Ilya Agarkov in ☄️ effector
как я понял приглашают всех желающих
источник