如何在自定义中间件中使用redux-persist

尼克·拉莫(Nick Rameau)

使用redux-persist 5.10.0。

使用官方文档进行配置后,它可以完美运行

// configureStore.js
// all imports here

const persistConfig = {
    key: 'root',
    storage,
    whitelist: ['auth']
};

const persistedReducer = persistReducer(persistConfig, rootReducer);

export default function configureStore() {
    const store = createStore(
        persistedReducer,
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
        applyMiddleware(axiosMiddleware),
        applyMiddleware(thunk)
    );

    const persistor = persistStore(store);

    return { store, persistor };
}

和:

// index.js
// All imports here

const { store, persistor } = configureStore();

ReactDOM.render(
    <Provider store={ store }>
        <PersistGate loading={null} persistor={persistor}>
            <App />
        </PersistGate>
    </Provider>,
    document.getElementById('root')
);

从我的configureStore.js文件中可以注意到,我有一个用于axios的自定义中间件。我正在使用JWT进行身份验证。该中间件将检查名为的操作常量,RECEIVE_LOGIN以便可以将返回的令牌分配给axios实例的默认标头:

// axiosConfig.js
// imports here
export const axiosMiddleware = ({ dispatch, getState }) => next => action => {
    if (action.type === 'RECEIVE_LOGIN') {
        axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${action.data.token}`;
    }

    return next(action);
}

但是由于redux-persist,我无法从action.type获取自定义类型RECEIVE_LOGIN-我得到的是persist / PERSIST,然后是persist / REHYDRATE。我什至找不到我的自定义类型action

我查了一下,但找不到任何带有自定义中间件的示例。

所以我的问题是,如何redux-persist与自定义中间件一起使用

标记物

首先,您的商店配置过程是错误的。您拨打applyMiddleware了不止一次。根据Redux常见问题解答,多次调用会applyMiddleware设置多个中间件链,这些中间件将无法正常工作

将其更改为applyMiddleware(axiosMiddleware, thunk),然后查看会发生什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在自定义中间件中使用csurf?

如何在Sails.js中使用自定义路由中间件?(ExpressJS)

在 Laravel 的自定义中间件中使用会话

如何解决 redux 错误 使用自定义中间件进行异步操作?

Redux中间件问题-错误:操作必须是纯对象。使用自定义中间件进行异步操作

测试自定义Redux中间件

在自定义Redux中间件中等待

自定义Redux中间件-调度到中间件链的开始吗?

在 Express 中使用自定义错误中间件时未定义 next

“动作必须是普通对象。对异步动作使用自定义中间件。” 与react / redux

Redux错误:动作必须是普通对象。使用自定义中间件进行异步操作

使用自定义异步中间件进行分派 - Redux Thunk - react Router

如何在redux-persist v5中使用白名单?

在AspNetCore中使用GlobalExceptionHandler和自定义中间件

在特定视图中使用自定义中间件获取类型错误

在OAuthBearer中间件上使用自定义RoleClaimType

添加自定义中间件

如何在Stradi中设置自定义中间件?

如何在express中创建自定义中间件?

如何在Django中设置自定义中间件

如何在自定义的Owin中间件中安全地拦截Response流

如何延迟 Redux Persist Gate 的 SplashScreen?

如何在 angular-redux 中使用 redux-state-sync 中间件?

在pyspark中使用partitionBy()和persist()

如果已设置标头,如何使用自定义的HTTP处理程序/中间件?

如何使用自定义中间件向路由添加“异步”?

如何使用laravel通过auth中间件开发自定义登录

在api模式下使用rails 5时如何创建自定义中间件?

如何在redux“ timeoutScheduler”中间件文档示例中使用取消功能?