пользовательский крючок с сагой redux

#reactjs #react-redux #react-hooks

#реагирует на #реагировать-переделывать #реагируют-крючки

Вопрос:

У меня есть пользовательский хук, который дает мне экземпляр класса для запроса различных методов службы, эта служба зависит от контекста (AxiosContext), который, в свою очередь, зависит от другого контекста (AuthContext), чтобы иметь возможность передавать токен перехватчику.

 //Custom hook export class ClientService extends Apilt;Clientgt; {  constructor(instance, options = {}) {  super(instance, "clients");  } } function useClientService(options = {}) {  const [clientInstance, setClientInstance] = useState(null);   const instance = useContext(AxiosContext);   useEffect(() =gt; {  if (instance) {  setClientInstance(new ClientService(instance, options));   }  }, [instance]);  return clientInstance; }  export { useClientService };  export const AxiosContext = createContext(null); export const AxiosContextProvider = (props) =gt; {  const ref = useRef(0);  const [instance, setInstance] = useState(null);  const authContext = useContext(AuthContext);   useEffect(() =gt; {  ref.current  ;  })  useEffect(() =gt; {  if (authContext.token) {  const nInstance = axios.create();  const request = new RequestInterceptor(authContext);  const response = new ResponseInterceptor(authContext);  nInstance.interceptors.request.use(request.Success(authContext.token, ref.current), request.Err());  nInstance.interceptors.response.use(response.Success(), response.Err());  console.groupEnd()  setInstance(() =gt; nInstance)  }  }, [authContext.token]);   return (  lt;gt;  lt;AxiosContext.Provider value={instance}gt;  {props.children}  lt;/AxiosContext.Providergt;  lt;/gt;  ); };  

и я потребляю его вот так.

 useEffect(() =gt; {   if (clientService) {  ......  }  }, [clientService]);  

это прекрасно работает с redux и операциями, но я хочу отделить логику контроллеров от моих компонентов и передать все это саге, я нахожу, что у нее есть способ передавать им контексты, но они являются чистыми синглетами, если бы кто-нибудь мог мне помочь, как это сделать

Короче говоря, мне нужно что-то вроде этого.

 function* mySaga() {  const clientService=useClientService() //with context Axios and Context Auth  yield takeLatest("GET_SUCCESS", clientService.getAll); }  export default mySaga;  

Комментарии:

1. Я попытался передать экземпляр в магазин, чтобы вызвать его из redux saga, но, по-видимому, он не позволяет вводить несериализованные данные.