Apollo / graphQL:如何使用乐观UI来嵌套反应组件的变异?

时间:2018-02-23 11:58:48

标签: javascript reactjs react-apollo nextjs optimistic-ui

如下所示,我使用graphQL查询在pages/article.js中的nextJS应用程序中获取数据。 这些数据传递给另一个反应组件,它给出了一个复选框列表。

选中一个复选框即调用变异以将所选复选框的ID存储在数据库中。 为了更新内容,我使用refetchQueries再次调用主查询,这会将数据传递给当前组件。

到目前为止一切正常。现在我想使用乐观的UI实时获取这些东西 - 这让我有些问题......

替换refetchQueries
update: (store, { data: { getArticle } }) => {
  const data = store.readQuery({
    query: getArticle,
    variables: {
      id: mainID
    }
  })
  console.log(data)
}

让我看到来自TypeError: Cannot read property 'kind' of undefined的错误readQuery

我看不出我做错了什么。这只是获得优化用户界面的第一部分..

信息页/ article.js

import Article from '../components/Article'

class ArticlePage extends Component {
  static async getInitialProps (context, apolloClient) {
    const { query: { id }, req } = context
    const initProps = { }

    // ...

    return { id, ...initProps }
  }

  render () {
    const { id, data } = this.props
    const { list } = data
    return (
      <Article
        mainID={id}
        list={list}
      />
    )
  }
}

export default compose(
  withData,
  graphql(getArticle, {
    options: props => ({
      variables: {
        id: props.id
      }
    })
  })
)(ExtendedArticlePage)

组件/ Article.js

import { getArticle } from '../graphql/article'
import { selectMutation } from '../graphql/selection'

export class Article extends Component {
  checkboxToggle (id) {
    const { mainID, checkboxSelect } = this.props

    checkboxSelect({
      variables: {
        id
      },
      refetchQueries: [{
        query: getArticle,
        variables: {
          id: mainID
        }
      }],

    })
  }

  render () {
    const { list } = this.props
    return (
      list.map(l => {
        return (<Checkbox onClick={this.checkboxToggle.bind(this, l.id)} label={l.content} />)
      }
    )
  }
}

export default compose(
  graphql(selectMutation, { name: 'checkboxSelect' })
)(Article)

0 个答案:

没有答案