突变后的Apollo GraphQL(React)refetchQueries / update不会更新商店

时间:2018-02-05 14:50:30

标签: reactjs graphql react-apollo apollo-client

当您要移动文件/文件夹时,我的组件在Google云端硬盘中的行为与此类似。它获取有关目录的所有必要数据,显示它,并在选择一个目录后 - 它将文件移动到另一个文件夹中。我试图瞄准的目标是更新当前显示的文件夹和文件移动文件夹的数据。我尝试了两种方式(refetchQueries,update),但没有工作......

主要问题是执行updateQueries中定义的查询,但存储不会更新。

如果有人能提供帮助,那就太好了!

const EntityMoveContainer = compose(
    graphql(GET_DIRECTORIES, {
        options() {/*...*/},
        props(props) {/*...*/}
    }),
    graphql(MOVE_FILE, {
       props(props) {
           const { mutate, ownProps } = props;
           const { entity, directoryId } = ownProps;

           return {
            async moveFile(destDirId) {
                return mutate({
                    variables: {
                        fileId: entity.id,
                        directoryId: destDirId,
                    },
                    refetchQueries: () => [
                        {
                            query: GET_DIRECTORIES,
                            variables: {
                                id: directoryId,
                                sortKey: store.sortKey,
                                cursor: store.cursor,
                                filetype: store.filetype,
                            },
                        },
                        {
                            query: GET_DIRECTORIES,
                            variables: {
                                id: destDirId,
                                sortKey: store.sortKey,
                                cursor: store.cursor,
                                filetype: store.filetype,
                            },
                        },
                    ],
                    /* update(proxy) {
                        console.log('update method');
                        try {
                            const storeData = proxy.readQuery({
                                query: GET_DIRECTORIES,
                                variables: {
                                    id: destDirId,
                                    sortKey: store.sortKey,
                                    filetype: store.filetype,
                                    cursor: store.cursor,
                                },
                            });

                            storeData.directory = {
                                ...storeData.directory,
                                files: {
                                    ...storeData.directory.files,
                                    edges: [
                                        ...storeData.directory.files.edges,
                                        { node: entity, __typename: 'File' },
                                    ],
                                },
                            };

                            proxy.writeQuery({
                                query: GET_DIRECTORIES,
                                variables: {
                                    id: destDirId,
                                    sortKey: store.sortKey,
                                    filetype: store.filetype,
                                    cursor: store.cursor,
                                },
                                data: storeData,
                            });
                        } catch (e) {
                            console.log(e);
                        }
                    }, */
                });
            },
        };
    },
}),
)(EntityMoveView)

1 个答案:

答案 0 :(得分:1)

问题在于

  

光标:''

属性我传递给refetchQueries。