2017-03-29 11 views
5

私のGraphQLサーバからのデータを私の反応するネイティブアプリケーションにフェッチするためにreact-apolloが組み込まれています。私は、還元店を持続させ、再水和するために還元便器を使用します。還元反応を伴うアポロ

しかし、私はアポロ状態を再水和する方法を知らない。

誰でも知っているのですか?

おかげ

答えて

3

あなたはredux-persistautoRehydrate機能を使用することができます。それは非同期的にタイプREHYDRATEのアクションを実行します。アクションをブラックリストに登録しない限り、すべてのストアを再水分します。

以前に実行されたクエリを実行しようとすると、ApolloはReduxストアを最初にチェックし、APOLLO_QUERY_RESULT_CLIENTアクションが実行されていることを確認します。つまり、サーバーにクエリする代わりにクライアントストアから戻ってきます。あなたは(など、最初に、唯一のネットワークキャッシュ)、クエリがデータを取得する方法を指定するには

fetchPolicyを変更することができますここで基本的な設定です:srtucker22 @

import React, { Component } from 'react'; 
import { ApolloProvider } from 'react-apollo'; 
import { createStore, combineReducers, applyMiddleware, compose } from 'redux'; 
import ApolloClient, { createNetworkInterface } from 'apollo-client'; 
import { persistStore, autoRehydrate } from 'redux-persist'; 
import { AsyncStorage } from 'react-native'; 

const networkInterface = createNetworkInterface({ uri: 'http://localhost:8080/graphql' }); 

export const client = new ApolloClient({ 
    networkInterface: networkInterface, 
}); 

const store = createStore(
    combineReducers({ 
    apollo: client.reducer(), 
    }), 
    {}, // initial state 
    compose(
    applyMiddleware(client.middleware()), 
    autoRehydrate(), 
), 
); 

// persistent storage 
persistStore(store, { 
    storage: AsyncStorage, // or whatever storage you want 
}); 

export default class App extends Component { 
    render() { 
    return (
     <ApolloProvider store={store} client={client}> 
     <YourApp /> 
     </ApolloProvider> 
    ); 
    } 
} 
+1

おかげで!!私の問題は、devTools()を使用し、次にautoRehydrate()を使用したことです。これがうまくいかず、私はautoRehydrate()を最初に実行してからdevTools()を実行しなければなりません。 – Carol

+0

@Carolあなたを祝福してください。あなたのソリューションは、ちょうど3日間の爪を噛んで、髪を引き上げました。 '(typeof window .__ REDUX_DEVTOOLS_EXTENSION__!== 'undefined' || process.env.NODE_ENV!== 'production')の前に' autoRehydrate() 'を置きますか? window .__ REDUX_DEVTOOLS_EXTENSION __():(f)=> f、 '解決されたデータは、ページのリロード後に永続化されます。 – TheoG

関連する問題