Apollo 突变重置调用状态

Apollo mutation reset called state

我有一个 React-Apollo Mutation,当用户在播放视频中以某种方式前进时,它会被调用。 React Player 每 2000 毫秒调用一次回调,当进度为 88% 时调用我的突变。在那之后 called 是真的,没有更多的事情发生。

我需要在用户重播视频时重置突变状态。 React Player 有 onStartonEnd 的回调,我可以在其中进行实际重置,但我的问题是我似乎无法找到如何去做。

<Query query={GET_VIDEO} variables={queryVars}>
{({ error, loading, data, refetch }) => {
    return <Mutation
        mutation={VIDEO_WATCHED}
        variables={mutationVars}
        // refetchQueries={[{ query: GET_VIDEO, variables: queryVars }]}
        onCompleted={() => refetch()}
    >
        {(mutate, { called }) => {
            const onProgress = ({ played }) => {
                if (!called && played >= 0.88) {
                    mutate();
                }
            };
            return <VimeoPlayer
                url={video.url}
                onProgress={onProgress}
                progressInterval={2000}
            />;
        }}
    </Mutation>;
}}
</Query>;

我已经尝试在突变上使用 refetchQueries 并在查询中使用 refetch 来刷新我的突变,但没有成功。

我通过使用状态 属性 来跟踪突变是否已被触发来解决这个问题。简单有效。

不过,我很想知道我最初的问题是否有答案。

function MyComponent() {
  const [completed, setCompleted] = useState(false);
  <Query query={GET_VIDEO} variables={queryVars}>
    {({ error, loading, data}) => {
        return <Mutation
            mutation={VIDEO_WATCHED}
            variables={mutationVars}
            onCompleted={() => refetch()}
        >
            {(mutate, { called }) => {
                const onProgress = ({ played }) => {
                    if (!completed && played >= 0.88) {
                        mutate();
                    }
                };
                return <VimeoPlayer
                    url={video.url}
                    onProgress={onProgress}
                    progressInterval={2000}
                    onEnded={() => setCompleted(true)}
                />;
            }}
        </Mutation>;
    }}
  </Query>;