使用Redux时,Next.js是否不需要浏览器历史记录?

使用Redux时,Next.js是否不需要浏览器历史记录?,next.js,Next.js,我正在尝试将我的React应用程序迁移到Next.js。我一直在export const history=createBrowserHistory()中出现以下错误 不变冲突:浏览器历史记录需要DOM configureStore.js import { createStore, combineReducers, compose, applyMiddleware } from "redux"; import { connectRouter, routerMiddleware } from "co

我正在尝试将我的
React
应用程序迁移到
Next.js
。我一直在
export const history=createBrowserHistory()中出现以下错误configureStore.js
中的code>

不变冲突:浏览器历史记录需要DOM

configureStore.js

import { createStore, combineReducers, compose, applyMiddleware } from "redux";
import { connectRouter, routerMiddleware } from "connected-react-router";
import { createBrowserHistory } from "history";
import thunk from "redux-thunk";
import user from "./modules/user";
import stores from "./modules/stores";
import info from "./modules/info";

export const history = createBrowserHistory();

const middlewares = [thunk, routerMiddleware(history)];

const reducer = combineReducers({
  user,
  stores,
  info,
  router: connectRouter(history)
});

export default function configureStore(preloadedState) {
  return createStore(
      reducer,
      preloadedState,
      compose(
        applyMiddleware(
          ...middlewares
        )
      )
    );
}

我发现,在迁移到Next.js时,有许多事情需要更改,因为Next是一个框架,它需要自己的代码体系结构以及SSR和CSR之间的差异。当我学习Next.js教程时,有一个路由部分说路由是基于CSR或SSR区分的。这是否意味着我不能在Next.js中使用浏览器历史记录?这就是我的猜测。我还是很困惑。

你说得对。SSR和CSR之间存在差异。Next.js使用Next Router进行CSR路由,如果您需要自定义SSR,那么您应该向
express
等框架寻求帮助

通过执行CSR,nextjs将记住浏览器历史记录,后退按钮将按预期工作。但是,如果需要将路线更改为非常不同的路线,可以使用以下任一解决方案:

import Router from 'next/router';
...
Router .push('/about');


迁移需要一些时间,您需要记住next.js将自动接管路由和浏览器历史记录的费用。除非你定制它。

你是对的。SSR和CSR之间存在差异。Next.js使用Next Router进行CSR路由,如果您需要自定义SSR,那么您应该向
express
等框架寻求帮助

通过执行CSR,nextjs将记住浏览器历史记录,后退按钮将按预期工作。但是,如果需要将路线更改为非常不同的路线,可以使用以下任一解决方案:

import Router from 'next/router';
...
Router .push('/about');


迁移需要一些时间,您需要记住next.js将自动接管路由和浏览器历史记录的费用。除非您对其进行自定义。

那么,我是否应该删除所有有关CSR路由的代码,例如
ConnectedRouter
createBrowserHistory
?是的。您应该删除它们,并在下一步考虑它们。谢谢您的澄清!那么,我是否应该删除关于CSR路由的所有代码,例如
ConnectedRouter
createBrowserHistory
?是的。您应该删除它们,并在下一步考虑它们。谢谢您的澄清!
Router.beforePopState(({ url, as, options }) => {...}