2017-07-19 3 views
1

I redux verbunden Next.js App nur like in the docs (nicht sicher, was mapDispatchToProps tut im Beispiel obwohl):Next.js und redux. Bevölkern-Speicher auf Server-Seite, hat keinerlei Auswirkungen

Init Methode speichern:

import { createStore, applyMiddleware } from 'redux'; 
import { createLogger } from 'redux-logger'; 
import axios from 'axios'; 
import axiosMiddleware from 'redux-axios-middleware'; 
import tokenMiddleware from './tokenMiddleware'; 
import getReducer from './combineReducers'; 

const logger = createLogger({ collapsed: true, diff: true }); 
const axiosMw = axiosMiddleware(axios.create(), { successSuffix: '_SUCCESS', errorSuffix: '_FAILURE' }); 

export default function initStore(logActions) { 
    return function init() { 
    const middleware = [tokenMiddleware, axiosMw]; 
    if (logActions) middleware.push(logger); 
    return createStore(getReducer(), applyMiddleware(...middleware)); 
    }; 
} 

HOC, die ich verwende, um Seiten zu verbinden:

import 'isomorphic-fetch'; 
import React from 'react'; 
import withRedux from 'next-redux-wrapper'; 
import { setUser } from 'lib/publisher/redux/actions/userActions'; 
import PublisherApp from './PublisherApp'; 
import initStore from '../redux/initStore'; 

export default Component => withRedux(initStore(), state => ({ state }))(
    class extends React.Component { 
    static async getInitialProps({ store, isServer, req }) { 
     const cookies = req ? req.cookies : null; 
     if (cookies && cookies.user) { 
     store.dispatch(setUser(cookies.user)); 
     } 

     return { isServer }; 
    } 

    render() { 
     console.log(this.props.state); 
     return (
     <PublisherApp {...this.props}> 
      <Component {...this.props} /> 
     </PublisherApp> 
    ); 
    } 
    } 
); 

Das Problem, das ich habe, ist, t Hut versendet Aktion

store.dispatch(setUser(cookies.user)); 

scheint auf dem Server zu funktionieren (I Reduzierer habe gedebuggt und ich weiß, das Benutzerobjekt von Cookies tatsächlich durch Minderer gehandhabt wird), aber wenn ich console.log(this.props.state) bekomme ich Minderer mit Ausgangszustand - ohne Benutzer Daten.

Antwort

0

Der zweite Parameter im createStore-Aufruf fehlt. Versuchen Sie dies:

Beachten Sie hinzugefügt initData Parameter und seine Verwendung.

+1

ja es funktioniert! aber der Parameter sollte zur inneren Funktion gehen. – Tomasz

Verwandte Themen