0

当我升级到 NextJs11 时 next-redux-wrapper 商店不再工作,但使用 nextJs10 它工作得很好

require(`scss/${process.env.NEXT_PUBLIC_SITE_THEME}/main.scss`);
import 'rheostat/css/slider.css';
import 'rheostat/css/slider-horizontal.css';
import App, { AppProps, AppContext } from 'next/app'
import { wrapper } from 'Redux/appStore'
import { parseCookies, setCookie } from 'nookies'
import { AuthToken } from 'services/authToken'
import { auth } from 'services/auth'
import { TokenModel } from 'models/authModels'
import { authSuccess, saveCartId } from 'Redux/auth/actions'
import 'react-widgets/dist/css/react-widgets.css';
import 'react-datepicker/dist/react-datepicker.css';
import { NextPageContext } from 'next';
import Config from 'configs/Config';
import TagManager from 'react-gtm-module'
import { useEffect } from "react";
import { bindActionCreators } from 'redux';
import { getSeoData } from 'Redux/seo/actions'
import Logger from 'models/logger';

const tagManagerArgs = {
  gtmId: Config.PublicConfig.NEXT_PUBLIC_GTM_ID
}

const MyApp = ({ Component, pageProps }: AppProps) => {
  useEffect(() => {
    TagManager.initialize(tagManagerArgs)
  }, [])

  return (
    <Component {...pageProps} />
  )
}

let success = false;
function manageAuth(promiseAuth: Promise<TokenModel>, ctx: NextPageContext) {
  return promiseAuth
    .then((token: TokenModel) => {
      const tokenStr = JSON.stringify(token)
      setCookie(ctx, Config.ServerConfig.NEXT_PUBLIC_TOKEN_COOKIE_NAME, tokenStr, { maxAge: token.ExpiresIn, path: '/' });
      ctx.store.dispatch(authSuccess(token));
      success = true;
    })
    .catch((er) => {
      const log = new Logger('root');
      log.error(er)
      // TODO: A logger
    })
}

当我尝试 npm run build 时,我收到此错误类型错误:“NextPageContext”类型上不存在属性“商店”。在这一行 ctx.store.dispatch(authSuccess(token)); 并且它不再识别 next-redux-wrapper 的存储

MyApp.getInitialProps = async (appContext: AppContext) => {
  const appCtx = (appContext as AppContext).ctx;
  const { dispatch } = appCtx.store;
  let tokenStr: string;
  if (appCtx && appCtx.req) {
    const parsedCookie = parseCookies(appCtx);
    const cartId = parsedCookie.cartid;
    if (cartId) {
      dispatch(saveCartId(cartId));
    }
    tokenStr = parsedCookie.token;
    const token = new AuthToken(tokenStr);
    if (token.authToken) {
      if (!token.isExpired) {
        await dispatch(authSuccess(token.authToken));
      } else {
        if (token.authToken.RefreshToken) {
          // Tenter de rafraichir le token. Si erreur alors demander un nouveau anonymous
          await manageAuth(auth(undefined, undefined, token.authToken.RefreshToken), appCtx);
          if (!success) {
            await manageAuth(auth(), appCtx);
          }
        }
      }
    }
    else {
      await manageAuth(auth(), appCtx);
    }
  }
  await bindActionCreators(getSeoData, dispatch)(appCtx.pathname);
  // calls page's `getInitialProps` and fills `appProps.pageProps`
  const appProps = await App.getInitialProps(appContext);

  return {
    ...appProps,
    pageProps: {
      ...appProps.pageProps
    }
  }
}

export default wrapper.withRedux(MyApp)
4

0 回答 0