首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在next.js中使用react redux

在next.js中使用react redux
EN

Stack Overflow用户
提问于 2018-08-30 19:15:37
回答 2查看 21.5K关注 0票数 13

我尝试在next.js starter项目中使用Redux,并在项目中安装了next-redux-wrapper,但是我不确定根文件在这个项目中的什么位置。

我尝试按照next-redux-wrapper上显示的教程进行操作,但没有成功。什么都不会改变。

请告诉我如何将Redux添加到项目中。

致以问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-30 19:48:35

Next.js使用应用程序组件初始化页面。您可以重写它并控制页面初始化。

尽管此演示是针对next.js的,但它应该适用于nextjs-starter。

install next-redux-wrapper:

npm install --save next-redux-wrapper

_app.js ./pages 文件添加到目录:

代码语言:javascript
复制
// pages/_app.js
import React from "react";
import {createStore} from "redux";
import {Provider} from "react-redux";
import App, {Container} from "next/app";
import withRedux from "next-redux-wrapper";

const reducer = (state = {foo: ''}, action) => {
    switch (action.type) {
        case 'FOO':
            return {...state, foo: action.payload};
        default:
            return state
    }
};

/**
* @param {object} initialState
* @param {boolean} options.isServer indicates whether it is a server side or client side
* @param {Request} options.req NodeJS Request object (not set when client applies initialState from server)
* @param {Request} options.res NodeJS Request object (not set when client applies initialState from server)
* @param {boolean} options.debug User-defined debug mode param
* @param {string} options.storeKey This key will be used to preserve store in global namespace for safe HMR 
*/
const makeStore = (initialState, options) => {
    return createStore(reducer, initialState);
};

class MyApp extends App {

    static async getInitialProps({Component, ctx}) {

        // we can dispatch from here too
        ctx.store.dispatch({type: 'FOO', payload: 'foo'});

        const pageProps = Component.getInitialProps ? await Component.getInitialProps(ctx) : {};

        return {pageProps};

    }

    render() {
        const {Component, pageProps, store} = this.props;
        return (
            <Container>
                <Provider store={store}>
                    <Component {...pageProps} />
                </Provider>
            </Container>
        );
    }

}

export default withRedux(makeStore)(MyApp);

然后,实际的页面组件可以简单地连接:本演示如何在页面中连接index.js

代码语言:javascript
复制
import Link from "next/link";
import React from "react";
import {
  Container,
  Row,
  Col,
  Button,
  Jumbotron,
  ListGroup,
  ListGroupItem
} from "reactstrap";
import Page from "../components/page";
import Layout from "../components/layout";

import { connect } from "react-redux";

class Default extends Page {
  static getInitialProps({ store, isServer, pathname, query }) {
    store.dispatch({ type: "FOO", payload: "foo" }); // component will be able to read from store's state when rendered
    return { custom: "custom" }; // you can pass some custom props to component from here
  }
  render() {
    return (
      <Layout>content...</Layout>
    );
  }
}

export default connect()(Default);

有关更多信息,请参阅文档:next-redux-wrapper

票数 17
EN

Stack Overflow用户

发布于 2020-12-23 16:31:19

首先,我用"npx create-next- next.js“创建了一个简单的应用程序

然后,我在一个名为"store“的文件夹中创建了通用的redux设置。

这是文件夹结构

在pages中,我创建了一个_app.js。它里面的代码是这样的-

请让我知道,如果有人需要任何帮助设置...

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

https://stackoverflow.com/questions/52095681

复制
相关文章

相似问题

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