我想通过 NextJs 中间件检查我的 redux 存储区中有什么。
我找不到解决方案,我取得的更好成绩如下:
我从 [NextJs-with-redux-saga] 示例开始(https://github.com/vercel/next.js/tree/canary/examples/with-redux-saga)
要访问商店 SSR,我必须使用图书馆。当前的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);
Run Code Online (Sandbox Code Playgroud)
然后我根据文档在页面目录下创建了一个中间件
import { NextResponse } from 'next/server';
const middleware = (req, ev) => {
return NextResponse.next();
};
export default middleware;
Run Code Online (Sandbox Code Playgroud)
这显然还不够,因为我需要访问商店。我选择的库没有用于访问中间件上的存储的解决方案,因此我尝试使用该库进行破解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();
});
Run Code Online (Sandbox Code Playgroud)
不知怎的,它确实有效,我可以看到商店,但会提示一些错误
错误 - TypeError:response.headers 不可迭代
eval中间件页面/_middleware中不允许使用./node_modules/react/cjs/react.development.js
有人能够实现这一目标吗?
据我所知,NextJS 中间件新功能在服务器端工作。而Redux前端库。可能它在某些情况下有效,但当 redux 需要一些相关的浏览器操作时它会显示错误。
| 归档时间: |
|
| 查看次数: |
5173 次 |
| 最近记录: |