1

@Filipe Borges here (redux + react-redux + redux-persist) のアドバイスに従って、React Native アプリで既に作業している Redux 状態管理に永続性を追加しようとしています。私が望むのは、ユーザーが作成した (そして私が Redux に保存した) リスト項目が、アプリの再起動後に利用できるようにすることです。

redux-persist github READMEに従って必要なコードと思われるものを追加しましたが、アプリを起動しようとすると、すぐにクラッシュするか (空白の白い画面が数秒後に)、不可解なメッセージが表示されますエラーメッセージ/スタックトレースは、ライブラリ/コアReact Nativeコードのみで構成されるスタックトレースを使用して、「YogaNodeを持たない子を親に追加できません」ということを伝えています(つまり、どこにあるのか本当にわかりません見る)。

明確にするために、 redux-persist を追加する前に、 redux と react-redux は完全に正常に機能していました。

これが私のstore.js見た目です:

import { createStore, applyMiddleware } from "redux";
import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
import logger from "redux-logger";

import reducers from "./reducers";

// configure middleware
let middleware = [];
if (process.env.NODE_ENV === "development") {
    middleware.push(logger);
}

// configure persistance
const persistConfig = {
    key: "root",
    storage: storage,
};
const persistedReducers = persistReducer(persistConfig, reducers);

export default function configureStore() {

    // finalize store setup
    let store = createStore(persistedReducers, applyMiddleware(...middleware));
    let persistor = persistStore(store);
    return { store, persistor };
}

そして私のApp.js

import React, { Component } from 'react';
import Expo from "expo";

import Navigator from "./app/config/routes";

// store and state management
import { Provider } from "react-redux";
import configureStore from "./app/redux/store";
let { store, persistor } = configureStore();
import { PersistGate } from "redux-persist/lib/integration/react";

export default class App extends Component {
constructor() {
    super();
    Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.PORTRAIT_UP);
}

render() {
        return (
            <Provider store={store}>
                <PersistGate loading="loading..." persistor={persistor}>
                    <Navigator />
                </PersistGate>
            </Provider>
        );
    }
}

私の環境に関するメモ; 私のアプリは、以下を備えた切り離された Expo アプリです。

"dependencies": {
    "expo": "^24.0.0",
    "react": "16.0.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-24.0.0.tar.gz",
    "react-navigation": "^1.0.0-beta.21",
    "react-redux": "^5.0.6",
    "redux": "^3.7.2",
    "redux-logger": "^3.0.6",
    "redux-persist": "^5.4.0",
    ...etc, some more unrelated packages
  }

MacOS High Sierra で開発された Android 7 で動作します。

助けてくれてありがとう!

4

1 に答える 1