gpt4 book ai didi

react-native - Apollo Refetch() 后组件 `props.data` 不会重新加载

转载 作者:行者123 更新时间:2023-12-01 05:57:29 24 4
gpt4 key购买 nike

遵循 Apollo 的重构模式
https://www.apollographql.com/docs/react/recipes/recompose.html

我创建了一个简单的 ErrorScreen 组件,它输出 error.message并显示重试按钮。

const ErrorScreen = ({ refetch, data }) => {
const handleRetry = () => {
refetch()
.then(({ data, loading, error, networkStatus }) =>
// SUCCESS: now what do I do with the result?
console.log('DBUG:refetch', { networkStatus, loading, error })
)
.catch(error => console.log({ error }));
};
return (
<View style={styles.container}>
<Text>{(data && data.error && data.error.message) || 'Something went wrong'}</Text>
<Button title="Retry" onPress={handleRetry} />
</View>
);
};

调用 ErrorScreen 的组件非常简单。这是一个它的用法的例子,以防万一上下文有帮助......
import React from 'react';
import { FlatList, View } from 'react-native';
import { graphql } from 'react-apollo';
import gql from 'graphql-tag';
import { compose } from 'recompose';


import ErrorScreen, { renderIfError, setRefetchProp } from './ErrorScreen';
import LoadingScreen, { renderWhileLoading } from './LoadingScreen';
import Card from '../components/Card';

const EventList = ({ navigation, data: { me, error } }) => {
return (
<View style={styles.container}>
<FlatList
data={me.teams}
renderItem={({ item }) => <CardItem team={item} navigation={navigation} />}
keyExtractor={team => team.id}
/>
</View>
);
};

const options = {
fetchPolicy: 'cache-and-network',
};
const withData = graphql(userEvents, options);

export default compose(
withData,
renderWhileLoading(LoadingScreen),
setRefetchProp(),
renderIfError(ErrorScreen)
)(EventList);

预期结果

我曾希望调用 refetch()将...
  • 导致 ErrorScreen 消失,被 LoadingScreen 取代
  • 如果 refetch 成功,自动加载原来错误的组件,新数据
  • 如果重新获取失败,ErrorScreen 将再次出现

  • 实际结果

    这是我亲眼所见
  • ErrorScreen 仍然存在且不会消失
  • 原props.data.error不变,依然显示原错误,无查询结果
  • 原来的props.data.netWorkStatus还是8,说明有错误。 The networkStatus Docs似乎表明状态应该更改为 4 - refetching但也许我找错了地方。
  • 原版props.data.loading从未改变,我猜这是预期的行为,因为从我读过的内容来看,这仅表示第一次查询尝试

  • 我的问题
  • 我如何完成上面记录的预期行为?我错过了什么?

  • 相关问题
  • https://github.com/apollographql/apollo-client/issues/1622
  • 最佳答案

    我找到了一种解决方法,请在我自己的问题中查看:

    Apollo refetch not rerendering component

    就在文本“更新”下

    关于react-native - Apollo Refetch() 后组件 `props.data` 不会重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440527/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com