微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NextJS:使用`redux-observable` 时,`HYDRATION` 操作不会接收服务器有效负载

如何解决NextJS:使用`redux-observable` 时,`HYDRATION` 操作不会接收服务器有效负载

包:

  1. redux-observable@2.0.0-rc.2
  2. rxjs 最新版
  3. universal-rxjs-ajax 开发分支
  4. next-redux-wrapper 最新版
  5. next.js 最新版

我有一个带有 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',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 举报,一经查实,本站将立刻删除。