当我升级到 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)