首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将getStaticProps与next-redux-wrapper一起使用

将getStaticProps与next-redux-wrapper一起使用
EN

Stack Overflow用户
提问于 2021-06-16 21:23:10
回答 1查看 1.2K关注 0票数 0

我正在开发一个简单的next.js应用程序。对于状态管理,我使用next-redux-wrapper。在我的主页上,我想使用store.dispatch从我的api中获取数据库中的所有房间。

当我使用getServerSideProps并发出一个有效的操作时,它会获取我所有的房间。但问题是,当我想用getStaticProps获取房间时,它不起作用,什么也没发生。

当我开发大型应用程序时,我应该使用next-redux-wrapper,还是应该尝试其他库。因为我想在我的应用中使用getStaticPathsgetStaticPropsgetServerSideProps。在这些函数中,我通常会调度一个redux操作。

Store.js文件

代码语言:javascript
复制
import { createStore, applyMiddleware } from "redux";
import { HYDRATE, createWrapper } from "next-redux-wrapper";
import thunkMiddleware from "redux-thunk";
import reducers from "./reducers/reducers";

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

const reducer = (state, action) => {
 if (action.type === HYDRATE) {
 const nextState = {
 ...state,
 ...action.payload,
 };
 return nextState;
 } else {
 return reducers(state, action);
 }
};

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

export const wrapper = createWrapper(initStore);

_app.js文件

代码语言:javascript
复制
import "../styles/globals.css";
import { wrapper } from "../redux/store";

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

export default wrapper.withRedux(MyApp);

pages/index.js文件

代码语言:javascript
复制
import Layout from "../components/layout/Layout";
import Home from "../components/Home";
import { getRooms } from "../redux/actions/roomActions";
import { wrapper } from "../redux/store";

function HomePage() {
 return (
 <Layout>
 <Home />
 </Layout>
  );
}


//THIS WORKS
/*export const getServerSideProps = wrapper.getServerSideProps(
  (store) =>
    async ({ req }) => {
      await store.dispatch(getRooms(req));
    }
);*/
// THIS WORKS


// THIS DOES NOT WORK
export const getStaticProps = wrapper.getStaticProps(({ store }) => {
 async () => {
 await store.dispatch(getRooms("http://localhost:3000/"));
 };
});
// THIS DOES NOT WORK

export default HomePage;
EN

回答 1

Stack Overflow用户

发布于 2021-08-02 18:45:16

使用7.0.x版本。npm install next-redux-wrapper,默认情况下安装6.0.x

这仅在next-redux-wrapper的7和更高版本中受支持

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68003562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档