【问题标题】:NextJs Middleware and redux storeNextJs 中间件和 redux 存储
【发布时间】:2021-11-03 21:07:14
【问题描述】:

我想通过 NextJs 中间件检查我的 redux 存储中的内容。

我找不到解决方案,我取得的更好的结果如下:

我已经开始使用 [NextJs-with-redux-saga] 示例(https://github.com/vercel/next.js/tree/canary/examples/with-redux-saga)

要访问商店 SSR,我必须使用 library。当前 store.js 内容是这样的

import { createStore, applyMiddleware } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension';
import { HYDRATE, createWrapper } from 'next-redux-wrapper';
import rootReducer from './reducers/rootReducer';
import createSagaMiddleware from 'redux-saga';
import rootSaga from './sagas/rootSaga';

const sagaMiddleware = createSagaMiddleware();

const reducer = (state, action) => {
    if (action.type === HYDRATE) {
        // Merge any state which can be set in SSR here
        const nextState = {
            ...state,
            tick: {
                ...action.payload.tick,
            },
        };
        return nextState;
    } else {
        return rootReducer(state, action);
    }
};

const initStore = () => {
    console.log('here');
    const store = createStore(reducer, composeWithDevTools(applyMiddleware(sagaMiddleware)));
    sagaMiddleware.run(rootSaga);
    return store;
};

export const nextStore = createWrapper(initStore);

然后我根据文档在 pages 目录下创建了一个中间件

import { NextResponse } from 'next/server';

const middleware = (req, ev) => {
  return NextResponse.next();
};

export default middleware;

这显然还不够,因为我需要访问商店。 我选择的库没有访问中间件商店的解决方案,所以我尝试使用getServerSideProps 来破解。

import { NextResponse } from 'next/server';
import { nextStore } from '@store/store';

export const middleware = nextStore.getServerSideProps((store) => async ({ req, query, res }) => {
    const { tick } = store.getState();
    console.log(tick;
    return NextResponse.next();
});

不知怎的,它确实起作用了,我可以看到商店,但提示一些错误

错误 - TypeError: result.response.headers 不可迭代

./node_modules/react/cjs/react.development.js
eval不允许在中间件页面/_middleware中

有人能做到吗?

【问题讨论】:

    标签: redux next.js


    【解决方案1】:

    据我所知,NextJS 中间件的新功能适用于服务器端。而 Redux 前端库。可能它适用于某些情况,但它会在 redux 需要一些与浏览器相关的操作时显示错误。

    【讨论】:

    • 是的,redux 本身不允许这样做。本例中使用的库的目标是允许在服务器上使用 redux 状态,它确实适用于不同的服务器功能(例如 getServerSideProp),但没有实现中间件
    • 如果有支持中间件的实现就好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2020-11-29
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 2020-10-04
    相关资源
    最近更新 更多