2017-08-28 72 views
0

我們最初加載控件列表的應用程序:如何強制阿波羅客戶端使用緩存的數據

query Widgets() { 
    widgets() { 
     ...Widgets 
    } 
} 

fragment Widgets on Widgets { 
    name 
    description 
    rootWidget 
    widgets { 
     ...WidgetInterface 
    } 
} 

fragment WidgetInterface on WidgetInterface { 
    id 
    name 
    description 
    type 
} 

後來我使這個小工具,其中每一個反應成分是包裹着另一個graphql調用get單個小部件的數據。正如我們最初獲取這個數據我希望阿波羅得到本地存儲中的數據,但它總是使服務器調用

#import '../fragments/WidgetInterface.graphql' 

query Widget($id: ID!) { 
    widgetDetails(id: $id) { 
     ...WidgetInterface 
    } 
} 

那麼,有沒有去查,爲什麼不阿波羅使用緩存的呢?

回答

1

Apollo通過查詢緩存您的查詢結果。從服務器而不是緩存中獲取數據的原因是,您第一次渲染組件時,您從未進行過查詢,只有一個widgets

如果您想避免進行widgetDetails查詢,您可以將組件設置爲使用widgets查詢,而只是自己篩選結果。例如:

graphql(WIDGETS_QUERY, { 
    props: ({data, ownProps}) => ({ widget: data.widgets.filter(w => w === ownProps.widgetId) }) 
})(MyComponent) 
+0

那麼沒有辦法通過標識符直接獲取數據?因爲這是我從這篇文章中理解的:https://dev-blog.apollodata.com/the-concepts-of-graphql-bc68bd819be3 –

+0

我也想知道如何將新的小部件添加到列表中以強制並強制重新渲染。 –

+1

剛剛發現了'mutate'中的'update'函數。奇蹟般有效。 –