Size: a a a

React — русскоговорящее сообщество

2021 May 31

DS

Doston Sheraliev in React — русскоговорящее сообщество
#вопрос Есть ли альтернатива thunk, которая работает с useReducer? для асинхронных запросов
источник

Э

Эльдар in React — русскоговорящее сообщество
ага, так и было в 16 реакте, теперь же там в someComponent у меня форма, которая сохраняет дефолтные значения даже после закрытия (то бишь someValue = null) формы
источник

В

Влад in React — русскоговорящее сообщество
someValue ?? <SomeComponent />
источник

Э

Эльдар in React — русскоговорящее сообщество
redux-saga
источник

DS

Doston Sheraliev in React — русскоговорящее сообщество
saga работает с useRedcuer ом не?
источник

В

Влад in React — русскоговорящее сообщество
да
источник

DS

Doston Sheraliev in React — русскоговорящее сообщество
аха. спосибо
источник

В

Влад in React — русскоговорящее сообщество
function* incrementAsync() {
 const previousState = yield select();

 yield call(console.log, "I AM STARTING TO INCREMENT FROM", previousState);
 yield delay(2000);
 yield put({ type: "INCREMENT" });

 const state = yield select();

 yield call(console.log, "I AM FINISHED INCREMENTING TO", state);
}

function* saga() {
 yield takeLatest("INCREMENT_ASYNC", incrementAsync);
}

export const Example = () => {
 const [state, dispatch] = React.useReducer((state, action) => {
   switch (action.type) {
     case "INCREMENT":
       return state + 1;
     default:
       return state;
   }
 }, 0);

 const put = useReactSaga({ state, dispatch, saga });

 return (
   <div>
     <p>Clicked {state} times!</p>
     <button onClick={() => put({ type: "INCREMENT_ASYNC" })}>
       increment async
     </button>
   </div>
 );
};
источник

DS

Doston Sheraliev in React — русскоговорящее сообщество
отдуший!
источник

NV

Nick Volkov in React — русскоговорящее сообщество
> useReactSaga? это что?
источник

Ю

Юрий in React — русскоговорящее сообщество
Да ну, проверил только что, 17 реакт, меняю значение, демонтируется
источник

DS

Doston Sheraliev in React — русскоговорящее сообщество
может быт это custom xook?
источник

Ю

Юрий in React — русскоговорящее сообщество
источник

Ю

Юрий in React — русскоговорящее сообщество
Значение сбрасывается, в консоль выводится все
  useEffect(() => {
   return () => console.log('демонтируюсь')
 }, [])
источник

NV

Nick Volkov in React — русскоговорящее сообщество
ну понятно что кастомный хук, просто человек дает пример с кодом в которм неизвестная функция. может быть, конечно, предполагается что вопрошающий сам додумается. но я спросил на всякий случай
источник

Э

Эльдар in React — русскоговорящее сообщество
а точно ли размонтирован? или просто скрылся?))
источник

В

Влад in React — русскоговорящее сообщество
import React from 'react';
import { stdChannel, runSaga } from 'redux-saga';
import { take, call, effectTypes } from 'redux-saga/effects';

const STATE_READY = '@@STATE_READY';

export const useReactSaga = ({ state, dispatch, saga }) => {
 const environment = React.useRef({
   state,
   channel: stdChannel(),
   actions: [],
   stateChangePossible: false,
 });

 const [_, forceUpdate] = React.useState({});

 const put = React.useCallback((action) => {
   dispatch(action);
   environment.current.actions.push(action);
   forceUpdate({});
 }, []);

 React.useEffect(() => {
   const task = runSaga(
     {
       getState: () => environment.current.state,
       dispatch: put,
       channel: environment.current.channel,
       effectMiddlewares: [
         (runEffect) => (effect) => {
           const stateChangePossible = environment.current.stateChangePossible;

           if (effect.type === effectTypes.PUT) {
             environment.current.stateChangePossible = true;
           }

           if (effect.type === effectTypes.SELECT && stateChangePossible) {
             environment.current.stateChangePossible = false;

             return runEffect(
               call(
                 function* (selector, args) {
                   const action = yield take(STATE_READY);

                   return yield call(selector, action.payload, ...args);
                 },
                 effect.payload.selector,
                 effect.payload.args,
               ),
             );
           }

           return runEffect(effect);
         },
       ],
     },
     saga,
   );

   return () => task.cancel();
 }, []);

 React.useEffect(() => {
   environment.current.state = state;

   if (environment.current.actions.length > 0) {
     const actions = environment.current.actions;
     environment.current.actions = [];

     actions.forEach((action) => environment.current.channel.put(action));
     environment.current.channel.put({
       type: STATE_READY,
       payload: state,
     });

     environment.current.stateChangePossible = false;
   }
 });

 return put;
};
источник

DS

Doston Sheraliev in React — русскоговорящее сообщество
вы правы, я искал документатцы, чтобы понять, что
источник

Ю

Юрий in React — русскоговорящее сообщество
точно. Все значения забыты, все сброшено
источник

Ю

Юрий in React — русскоговорящее сообщество
Нативный инпут сбросился, setState сбросился
источник