[RN] [Redux-Persist] AutoRehydrate不是一个功能

时间:2018-01-30 04:59:34

标签: reactjs react-native redux persist

我正在使用redux-persist 5.5.0 当我调试我的本机应用程序时, 错误说“autoRehydrate不是函数” 我的源代码在这里,请给我帮助

"use strict";

import thunk from "redux-thunk";
import analytics from "./analytics";
import array from "./array";
import promise from "./promise";
import reducers from "../reducers";
import { createLogger } from "redux-logger";
import { applyMiddleware, createStore, compose } from "redux";
import { persistStore, autoRehydrate } from "redux-persist";
import { ensureCompatibility } from "./compatibility";
import { AsyncStorage } from "react-native";

const isDebuggingInChrome = false;

const logger = createLogger({
    predicate: (getState, action) => isDebuggingInChrome,
    collapsed: true,
    duration: true
});

const middleware = applyMiddleware(thunk, promise, array, analytics, logger);

async function configureStore(onComplete: ?() => void) {
    const didReset = await ensureCompatibility();
    const store = createStore(reducers, { /* TODO: Initial state */  }, compose(middleware, autoRehydrate()));

    persistStore(store, { storage: AsyncStorage }, _ => onComplete(didReset));

    if (isDebuggingInChrome) {
        window.store = store;
    }
    return store;
}

2 个答案:

答案 0 :(得分:11)

redux-persist 5.x已更改API并且不再使用autoRehydrate。以下是我现在使用redux-persist的方式。

 function initMap() {
        var directionsService = new google.maps.DirectionsService;
        var directionsDisplay = new google.maps.DirectionsRenderer;
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 15,
          center: {lat: 44.291971, lng: 19.9722431}
        });
        directionsDisplay.setMap(map);

        var onChangeHandler = function() {
          document.getElementById("setPanel").innerHTML = ""; // THIS ONE!
          calculateAndDisplayRoute(directionsService, directionsDisplay);
        };
        document.getElementById('start').addEventListener('change', onChangeHandler);
        document.getElementById('end').addEventListener('change', onChangeHandler);
      }

      function calculateAndDisplayRoute(directionsService, directionsDisplay) {
        directionsService.route({
          origin: document.getElementById('start').value,
          destination: document.getElementById('end').value,
          provideRouteAlternatives: true,
          travelMode: 'DRIVING'
        }, function(response, status) {
          if (status === 'OK') {
            // set loop to iterate through from the response.routes array

            console.log(response.routes.length);
            console.log(response.routes);

            for (var j = 0; j < response.routes.length; j++){

                var dirDisplay = new google.maps.DirectionsRenderer();
                    dirDisplay.setMap(map);
                    dirDisplay.setDirections(response); 
                    dirDisplay.setPanel(document.getElementById("setPanel"));
                    dirDisplay.setRouteIndex(j);
                    directionsDisplay.setDirections(response);
                    dirDisplay.setOptions({
                        draggable: true,
                        hideRouteIndex: true,
                        polylineOptions : {
                            strokeColor: colours[j],
                            strokeOpacity: 1.0,
                            strokeWeight: 5
                        }
                    });

            }
          } else {
            window.alert('Directions request failed due to ' + status);
          }
        });
      }

答案 1 :(得分:0)

如果使用上述方法,则错误:Object(...)不是函数,然后尝试使用: const store = createStore(   持久化减速器,   applyMiddleware(thunk,logger) );