要解决这个问题,我们可以使用Apollo Client的refetchQueries
选项来在writeQuery
函数调用后强制重新查询数据。这样,UI组件就会在数据更新后立即更新。
下面是一个示例代码:
import { useQuery, useMutation } from '@apollo/client';
import { GET_DATA, UPDATE_DATA } from 'your-graphql-queries';
const YourComponent = () => {
const { loading, error, data } = useQuery(GET_DATA);
const [updateData] = useMutation(UPDATE_DATA, {
refetchQueries: [{ query: GET_DATA }], // 在更新数据后重新查询
});
if (loading) return Loading...
;
if (error) return Error :(
;
const handleButtonClick = () => {
const newData = 'your-updated-data';
updateData({ variables: { newData } });
};
return (
{data.yourData}
);
};
export default YourComponent;
在上面的代码中,我们使用useQuery
钩子获取数据,并使用useMutation
钩子来定义updateData
函数进行数据更新。在useMutation
的选项中,我们使用refetchQueries
来重新查询数据。这样,在updateData
函数调用后,Apollo Client将重新查询数据,并在数据更新后立即更新UI组件。