有没有一种方法可以从商店内部使用Apollo / useQuery获取?

时间:2020-10-09 14:33:06

标签: reactjs apollo-client mobx

我在这里遇到了体系结构问题-过去几个月来我一直在使用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从存储中读取数据

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

0 个答案:

没有答案
相关问题