如果我在render()之前转换数据,则在突变后不会重新加载React-apollo更新

Jam*_*ber 5 javascript reactjs graphql react-apollo react-adopt

我已经包装了Query和Mutations,所以我可以全局处理每个操作都需要进行的重复操作Query, Mutation。在查询中,我转换数据,所以我不必担心所有nodes, edges, etc

我正在使用react-adopt将所有组件querymutations组件包装回视图层的一个渲染道具。

Works-一旦发生突变,页面将重新呈现

<ApolloQuery>

export const ApolloQuery = ({
  query: query,
  render,
}) => {
  return (
    <Query query={query}>
      {({ data }) => {
        return (
          <Fragment>
               render(data)
          </Fragment>
        )
      }}
    </Query>
  )
}
Run Code Online (Sandbox Code Playgroud)

组件

export default externalProps => {
  return (
    <QueryContainer {...externalProps}>
      {({ someQueryData, aMutation }) => { //react-adopt render props
        const { nestedData } = new apolloClass(someQueryData).start()
        return (
          <Grid container spacing={16}>
            {nestedData.map((ticket, index) => (
               {...Mutation button in here}
            ))}
         </Grid>
        )
      }}
    </QueryContainer>
  )
}
Run Code Online (Sandbox Code Playgroud)

不起作用-页面无法重新渲染,但缓存已使用正确的记录进行了更新

<ApolloQuery>

    <Query query={query}>
      {({ data }) => {
        const transformedData = new apolloClass(data).start() //move transform into render
        return (
          <Fragment>
               render(transformedData)
          </Fragment>
        )
      }}
    </Query>
Run Code Online (Sandbox Code Playgroud)

组件

export default externalProps => {
  return (
    <QueryContainer {...externalProps}>
      {({ someQueryData: { nestedData }, aMutation }) => {
        return (
          <Grid container spacing={16}>
            {nestedData.map((ticket, index) => (
               {...Mutation button in here}
            ))}
         </Grid>
        )
      }}
    </QueryContainer>
  )
}
Run Code Online (Sandbox Code Playgroud)

因此,现在,如果我apolloClass在渲染之前将进行转换,该页面将不会在突变后更新query

Sir*_*ple 1

您很可能需要在突变选项中设置refetchQueries或来强制 Apollo 更新这些查询,从而触发重新渲染。awaitRefetchQueries