2016-11-30 3 views
2

Ich versuche, Daten mit redux-persist persistent zu machen. Hier ist mein Code:asyncLocalStorage erfordert ein globales localStorage-Objekt

import { createStore as _createStore, applyMiddleware, compose } from 'redux'; 
import createMiddleware from './middleware/clientMiddleware'; 
import { routerMiddleware } from 'react-router-redux'; 
import {persistStore, autoRehydrate} from 'redux-persist'; 

export default function createStore(history, client, data) { 
    // Sync dispatched route actions to the history 
    const reduxRouterMiddleware = routerMiddleware(history); 

    const middleware = [createMiddleware(client), reduxRouterMiddleware]; 

    let finalCreateStore; 
    if (__DEVELOPMENT__ && __CLIENT__ && __DEVTOOLS__) { 
    const { persistState } = require('redux-devtools'); 
    const DevTools = require('../containers/DevTools/DevTools'); 
    finalCreateStore = compose(
     applyMiddleware(...middleware), 
     window.devToolsExtension ? window.devToolsExtension() : DevTools.instrument(), 
     persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) 
    )(_createStore); 
    } else { 
    finalCreateStore = applyMiddleware(...middleware)(_createStore); 
    } 

    const reducer = require('./modules/reducer'); 
    // const store = finalCreateStore(reducer, data); 
    const store = finalCreateStore(reducer, data, autoRehydrate()); 
    if (typeof window !== 'undefined') persistStore(store); 

    if (__DEVELOPMENT__ && module.hot) { 
    module.hot.accept('./modules/reducer',() => { 
     store.replaceReducer(require('./modules/reducer')); 
    }); 
    } 

    return store; 
} 

Es funktioniert gut mit einem einzigen Fluss. Aber wenn ich Seite auf irgendeiner Seite außer homePage aktualisiere, stört alles auf der Seite. Ich habe folgende Warnungen erhalten:

[1] redux-persist asyncLocalStorage requires a global localStorage object. Either use a different storage backend or if this is a universal redux application you probably should conditionally persist like so: https://gist.github.com/rt2zz/ac9eb396793f95ff3c3b 
[1] Warning: React can't find the root component node for data-reactid value `.15mzo5h179c.3.0.0`. If you're seeing this message, it probably means that you've loaded two copies of React on the page. At this time, only a single copy of React can be loaded at a time. 

Ps. Ich benutze react-redux-universal-hot-example boilerplate

+0

'localStorage' lebt nur vom Browser. – lux

Antwort

2

Sie möchten Ihr Geschäft mit dem localStorage speichern Enhancer nur bedingt erstellen, wenn Sie auf dem Client ausgeführt werden.

... 
const reducer = require('./modules/reducer'); 
let store; 

if (__CLIENT__) { 
    store = finalCreateStore(reducer, data, autoRehydrate()); 
    persistStore(store); 
} else { 
    store = finalCreateStore(reducer, data); 
} 
... 
+0

Ich habe es versucht, hat aber nicht funktioniert. –

+0

Vielleicht versuchen Sie stattdessen "if (typeof window! == 'undefined') persistStore (store);" –

+0

immer noch dasselbe Problem? Sollte ich das komplette Redux-Erstellungsmodul teilen? –

Verwandte Themen