预期结果: 设置为true的awaitRefetchQueries将确保refetchQueries()在突变完成和onCompleted()触发之前完成。
预期的完成顺序:
refetchQueries()
mutate()
onCompleted(),导航到新屏幕
实际结果/完成顺序:
mutate()
onCompleted(),导航到新屏幕
refetchQueries()
<Mutation
mutation={DELETE_TRIP_DECK}
variables={{ deckId: `usa` }}
optimisticResponse={{
deleteTripDeck: null,
}}
refetchQueries={() => [
{
query: GET_USER_INFO,
variables: { username: username },
},
]}
awaitRefetchQueries={true}
onCompleted={() => goBack()}>
{(
deleteTripDeck,
{ loading, error, data }
) => {
if (error) throw error
return (
<Button onPress={() => deleteTripDeck()}>
<Text>Delete trip</Text>
</Button>
)
}}
</Mutation>
给出一种理论,我们不是直接使用ApolloClient,而是使用构建在Apollo之上的AWSAppSyncClient,我想知道是否必须同时更新AWSAppSyncClient所需的react-apollo和apollo-client#3169,以便awaitRefetchQueries将正常运行。
更新-package-lock.json包含apollo-client@2.3.7,并且该发行版确实包含awaitRefetchQueries功能,请参见此处。从2.3.6版开始,支持awaitRefetchQueries(更改日志参考)。
Package.json:
"dependencies": {
"@expo/react-native-responsive-image": "^2.0.0",
"@expo/samples": "2.1.1",
"apollo-cache-inmemory": "^1.2.8",
"apollo-cache-persist": "^0.1.1",
"apollo-link": "^1.2.2",
"apollo-link-state": "^0.4.1",
"aws-amplify": "^1.0.4",
"aws-amplify-react-native": "^1.0.4",
"aws-appsync": "^1.3.2",
"aws-appsync-react": "^1.1.2",
"expo": "^28.0.0",
"graphql-tag": "^2.9.2",
"lodash.capitalize": "^4.2.1",
"react": "16.3.1",
"react-apollo": "^2.1.11",
"react-native": "https://github.com/expo/react-native/archive/sdk-28.0.0.tar.gz",
"react-native-indicators": "^0.13.0",
"react-native-keyboard-aware-scroll-view": "^0.7.2",
"react-native-modal": "^6.5.0",
"react-native-swiper": "^1.5.13",
"react-navigation": "^2.17.0",
"styled-components": "^3.4.1",
"uuid": "^3.3.2"
},
相关:#2267
由于该项目尚未公开,因此无法提供视频/屏幕截图/复制,但我想我尝试尝试解决一下问题,以防上述问题足以解决这个问题。谢谢!
最初发布-https://github.com/apollographql/react-apollo/issues/2426