微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以从商店内部使用Apollo / useQuery获取? 我可以看到两个选项:#1 #2

如何解决有没有一种方法可以从商店内部使用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请求数据但无法直接使用它的感觉就像是糟糕的体系结构。

  1. CMPT 请求useQuery中的数据。
  2. 具有useEffect来查看数据何时到达
  3. cmpt将数据放入存储区
  4. 存储是它的数据组织
  5. cmpt从存储中读取数据

这里有什么建议吗?有时候成为一个孤独的开发者很烂。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。