【问题标题】:NextJs TypeError: nextCallback is not a function [duplicate]NextJs TypeError:nextCallback不是一个函数[重复]
【发布时间】:2021-09-29 06:38:21
【问题描述】:

这是我第一次将 redux 与 next.js 一起使用,我无法使用 NextJs 设置 Redux,而且我总是收到此错误。我尝试了另一种方法,但仍然出现更多错误,我什至无法配置它。

而且它充满了错误信息。

TypeError: nextCallback is not a function
    at D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:146:46
    at step (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:57:23)
    at Object.next (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:38:53)
    at D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:32:71
    at new Promise (<anonymous>)
    at __awaiter (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:28:12)
    at makeProps (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:135:16)
    at D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:186:46
    at step (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:57:23)
    at Object.next (D:\Next Js\hotel\node_modules\next-redux-wrapper\lib\index.js:38:53)

这是设置文件

import { createStore, applyMiddleware, combineReducers } from "redux";
import { HYDRATE, createWrapper } from "next-redux-wrapper";
import thunkMiddleware from "redux-thunk";
import roomsReducer from "./reducers/rooms";

const bindMiddleware = (middleware) => {
  if (process.env.NODE_ENV !== "production") {
    const { composeWithDevTools } = require("redux-devtools-extension");
    return composeWithDevTools(applyMiddleware(...middleware));
  }
  return applyMiddleware(...middleware);
};

const combinedReducer = combineReducers({
  Room: roomsReducer,
});

const reducer = (state, action) => {
  if (action.type === HYDRATE) {
    const nextState = {
      ...state, // use previous state
      ...action.payload, // apply delta from hydration
    };
    if (state.count.count) nextState.count.count = state.count.count; // preserve count value on client side navigation
    return nextState;
  } else {
    return combinedReducer(state, action);
  }
};

const initStore = () => {
  return createStore(reducer, bindMiddleware([thunkMiddleware]));
};

export const wrapper = createWrapper(initStore);

这是 _app.js 文件

import "../styles/globals.css";
import Layout from "./layout/layout";
import { wrapper } from "../Redux/store";

function MyApp({ Component, pageProps }) {
  return (
    <Layout>
      <Component {...pageProps} />;
    </Layout>
  );
}

export default wrapper.withRedux(MyApp);

最后是我要发送操作的页面

import Home from "../components/Home/Home";
import { getAllRooms } from "../Redux/actions/index";
import { wrapper } from "../Redux/store";

export default function Index() {
  return <Home />;
}

export const getServerSideProps = wrapper.getServerSideProps(
  async ({ store }) => {
    await store.dispatch(getAllRooms());
  }
);

【问题讨论】:

标签: javascript reactjs redux react-redux next.js


【解决方案1】:

我找到了以下解决方案并按照相同的教程进行操作。

export const getServerSideProps = wrapper.getServerSideProps(
  (store) =>
    async ({ req, res }) => {
      await store.dispatch(getRooms(req));
    });

参考:https://github.com/kirill-konshin/next-redux-wrapper

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
【解决方案2】:

我已经多次查看代码,尽管我不是 Next.js 用户,但我注意到 app.js 渲染代码没有包含在包装商店的提供程序中,我希望看到类似这样的内容:

<Provider store={store}>
      <Layout>
           <Component {...pageProps} />
      </Layout>
</Provider>

此外,我希望 .withRedux() 包含一个 createStore 对象(在您的情况下为 initStore)。像这样:

export default withRedux(createStore)(
  withRouter(MyApp)
)

我希望这对您有所帮助,如果没有,请告诉我您面临的问题。

【讨论】:

  • 我尝试了很多方法,我使用 Provider 进行反应,但 next 仍然无法正常工作并给我另一个错误,所以我做了你的更改,但我遇到了这个错误.. TypeError: (0 , next_redux_wrapper__WEBPACK_IMPORTED_MODULE_5__.withRedux) 不是函数
  • 我对该主题做了一些额外的阅读,除了调度它与 React 中的工作方式完全相同。我建议创建一个仅安装 Nextjs 的 PoC 项目并遵循这个最小的设置教程:lukeliutingchun.medium.com/… 如果该项目包括 thunk 和 devtools 之类的中间件,则将其集成到您当前的解决方案中。这样你就可以确定 redux 部分正在工作。
  • 我做到了兄弟,我创建了新项目并尝试了您在上一条评论中添加的方式复制了所有代码,但我在从服务器端预加载数据时出错..//Preload from the server side ctx.store.dispatch({ type: "reducerA/setCounter", payload: 10, }); 及其错误TypeError: Cannot read property 'dispatch' of undefined@RodneyWormsbecher
猜你喜欢
  • 2021-12-04
  • 2020-10-09
  • 2021-12-13
  • 2014-02-03
  • 1970-01-01
  • 2017-11-10
  • 2022-07-20
  • 2017-12-16
  • 2016-05-01
相关资源
最近更新 更多