如何解决NextJS:使用`redux-observable` 时,`HYDRATION` 操作不会接收服务器有效负载
包:
-
redux-observable
@2.0.0-rc.2 -
rxjs
最新版 -
universal-rxjs-ajax
开发分支 -
next-redux-wrapper
最新版 -
next.js
最新版
export const getStaticProps = wrapper.getStaticProps((store) => async (ctx) => {
store.dispatch({ type: 'ADD_DATA' });
// const response = await fetch('https://rickandmortyapi.com/api');
// const data = await response.json();
// store.dispatch({ type: 'SERVER_ACTION',payload: data.characters });
return {
props: {},};
});
操作 'ADD_DATA'
触发操作 'SERVER_ACTION'
:
export const AddDataEpic: Epic = (action$) =>
action$.pipe(
ofType('ADD_DATA'),mergeMap((action) =>
request({ url: 'https://rickandmortyapi.com/api' }).pipe(
map((response) => {
return {
type: 'SERVER_ACTION',payload: response.response.characters,};
})
)
)
);
在 reducer
子句中的 case 'SERVER_ACTION':
内,我收到了负载:
const server = (state: State = { data: null },action: AnyAction) => {
switch (action.type) {
case HYdratE: {
console.log('HYdratE >',action.payload); // logs out "HYdratE > { server: { data: null } }"
return {
...state,...state.server,...action.payload.server,};
}
case 'SERVER_ACTION': {
console.log('SERVER_ACTION >',action.payload); // logs out "SERVER_ACTION > https://rickandmortyapi.com/api/character"
return {
...state,data: action.payload,};
}
default:
return state;
}
};
但有效负载未传递给 HYdratE
操作:console.log('HYdratE >',action.payload); // logs out "HYdratE > { server: { data: null } }"
如果我从 'SERVER_ACTION'
内部调度 getStaticProps
操作:
export const getStaticProps = wrapper.getStaticProps((store) => async (ctx) => {
// store.dispatch({ type: 'ADD_DATA' });
const response = await fetch('https://rickandmortyapi.com/api');
const data = await response.json();
store.dispatch({ type: 'SERVER_ACTION',};
});
HYdratE
中的 reducer
操作接收有效负载:HYdratE > { server: { data: 'https://rickandmortyapi.com/api/character' } }
我不明白我的代码有什么问题。
可能是其中一个库中的错误?还是我的代码有误?
如果有人有任何建议,请
解决方法
@PYTHON DEVELOPER999 可能是由于 next-redux-wrapper 的最新更新,迁移步骤很少 =>
https://github.com/kirill-konshin/next-redux-wrapper#upgrade-from-6x-to-7x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。