如何解决有没有一种方法可以从商店内部使用Apollo / useQuery获取? 我可以看到两个选项:#1 #2
我在这里遇到了体系结构问题-过去几个月来我一直在使用Apollo缓存进行本地状态管理来开发我的项目,并且正在转向MobX。我的应用程序使用基于图形的数据结构,并且需要我以有时非常复杂的方式与状态进行交互和操纵状态。对于GraphQL查询和Apollo缓存(对我而言),这种控件已被证明太难了。
话虽如此,我不想离开GraphQL,我只是想将结果保存在MobX存储中,因为它给了我很大的自由度。由于useQuery的钩子性质,我只是无法弄清楚如何从MobX存储功能中请求GraphQL数据。
我可以看到两个选项:
#1
从存储方法中发出请求令人感到混乱,被迫,并且到目前为止容易出错。
class ProjectStore {
isLoading = false;
project;
tasks = {};
constructor(projectId) {
makeAutoObservable(this);
const [_fetchTasks,{ data: taskData }] = useLazyQuery(TASKS_QUERY);
this._fetchTasks = _fetchTasks;
let { loading,data } = useQuery(PROJECT_AND_ROOT_TASK_QUERY,{
variables: { projectId },});
this.isLoading = !!loading;
this.project = data?.project;
}
getTasks(taskIds) {
let { loading,data } = this._fetchTasks({
variables: { taskIds },});
console.log(data);
}
}
export default ProjectStore;
#2
让cmpt请求数据但无法直接使用它的感觉就像是糟糕的体系结构。
- CMPT 请求
useQuery
中的数据。 - 具有
useEffect
来查看数据何时到达 - cmpt将数据放入存储区
- 存储是它的数据组织
- cmpt从存储中读取数据
这里有什么建议吗?有时候成为一个孤独的开发者很烂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。