我运行graphql查询,并使用结果呈现一些项目。这很好。现在,在另一个屏幕上,我使用apollos refetch选项运行另一个变异,这样,只要运行该变异,第一个查询就会在使用它的任何地方重新获取数据。 refetching部分工作正常,我已经在其他屏幕上对其进行了测试。
但是,由于我正在做一些映射并使用setStates,所以尽管我获得了新数据,但它不会传递给FlatList
,因此FlatList不会得到更新。在我未进行映射的另一个屏幕上,我只是将data
传递到FlatList
中,它可以正常工作,但是在这里却不能。
那我该如何解决呢?我尝试使用useEffect
,但不知道在其中写什么。
export const WhitelistBar: React.FC = () => {
const [friendList, setFriendList] = useState<Friend[]>();
const [originatorId, setOriginatorId] = useState<number>();
useEffect(() => {
//setFriendList(DATA);
//console.log('friendlist', friendList);
}, [useGetMyProfileQuery]);
const _onCompleted = (data) => {
console.log('running', data);
let DATA = data.me.friends.nodes.map(
(item: {
id: number;
firstName: string;
rating: number;
vehicles: Vehicle[];
friends: UserConnection;
}) => ({
id: item.id,
imageUrl: defaultUrl,
name: item.firstName,
rating: item.rating,
vehicles: item.vehicles,
numberOfFriends: item.friends.totalCount,
}),
);
setFriendList(DATA);
console.log('daattaaa', DATA);
setOriginatorId(data.me.id)
};
const _onError = () => {
let DATA = [
{
id: 1,
imageUrl: defaultUrl,
name: 'Friend',
},
{
id: 2,
imageUrl: defaultUrl,
name: 'Friend',
},
{
id: 3,
imageUrl: defaultUrl,
name: 'Friend',
},
];
setFriendList(DATA);
setOriginatorId(0);
};
const { data } = useGetMyProfileQuery({
onCompleted: _onCompleted,
onError: _onError,
});
return (
<View style={scaledStyles.container}>
<View style={scaledStyles.whiteListBarTitle}>
<Text style={scaledStyles.whiteListBarText}>Meine Freunde</Text>
</View>
<View style={{ flexDirection: 'row' }}>
<FlatList
showsHorizontalScrollIndicator={false}
data={friendList}
horizontal={true}
renderItem={({ item }) => (
<WhitelistItem
title={item.name}
face={item.imageUrl}
numberOfFriends={item.numberOfFriends}
vehicles={item.vehicles}
/>
)}
keyExtractor={(item) => item.id.toString()}
/>
</View>
</View>
);
};
答案 0 :(得分:0)
您是否有理由在每个渲染器上调用useGetMyProfileQuery函数?
据我所知,您希望像下面这样将函数调用移到useEffect中:
useEffect(() => {
useGetMyProfileQuery({onCompleted: _onCompleted, onError: _onError});
}, [])
这将在组件安装时运行一次useGetMyProfileQuery,类似于componentDidMount的工作原理!
不确定那是不是你要找的!