【发布时间】:2020-01-31 18:17:44
【问题描述】:
我目前正在开发一个反应应用程序,它使用 GraphQL 后端并具有额外的本地状态。我正在使用解析器来解析随时间变化的本地字段,但解析器只触发一次。
我尝试使用 cache.readQuery 重新运行查询以防本地字段发生更改,但它似乎没有按我的预期工作。
export const resolvers = {
Query: {
resolvedDevice: (obj, args, { cache }, info) => {
const data = cache.readQuery({
query: gql`
query {
selectedDevice @client
}
`
});
// do stuff with the data
}
},
Mutation: {
selectDevice: (_, { id }, { cache }) => {
cache.writeData({ data: { selectedDevice: id } });
}
}
};
const query = gql`
query GetResolvedDevice {
resolvedDevice @client
}
`;
在这种情况下,解析器中的“resolvedDevice”只执行一次,即使我通过突变“selectDevice”对缓存进行了突变。我希望通过突变更改本地状态时,解析器也会再次运行,因为缓存正在更改。
这是执行查询的代码:
const ModalContainer = props => {
const { loading, error, data } = useQuery(query);
if (loading || error) {
return null;
}
return (
<Modal
device={data.resolvedDevice}
/>
);
};
在这个组件中,我在 selectedDevice 上运行一个突变:
export const SELECT_DEVICE = gql`
mutation SelectDevice($id: String!) {
selectDevice(id: $id) @client
}
`;
const DevicesNoGeoContainer = () => {
const [selectDevice] = useMutation(SELECT_DEVICE);
return (
<DevicesNoGeo
onGeoClick={id => {
selectDevice({ variables: { id } });
}}
/>
);
};
【问题讨论】:
-
查询不会自行自动更新。您可以在运行查询/突变的地方发布代码吗?需要明确的是,所涉及的查询都是本地的,还是您从后端获取数据?
-
这有帮助吗?
标签: reactjs react-apollo apollo-client resolver