Apollo fetchMore更新道具不重新渲染组件

时间:2017-04-04 17:06:05

标签: reactjs react-native apollo react-apollo apollo-client

我有一些"帖子"来自graphql查询,我尝试使用{+ 3}}中描述的偏移+限制进行分页。目前正在按" loadMore"更新查询,fetchMoreResult中的结果是正确的。此外,连接newResults在记录时正确显示。也许我做出了错误的假设,但我理解文档的方式是新生成的posts会自动传递到我的TestComponent并重新渲染。这是不正确的?

import React from 'react';
import { View, Text } from 'react-native';
import { graphql } from 'react-apollo';
import { GetPosts } from 'app/graphql';

class TestComponent extends React.Component {
  render() {
    // I would expect this to log the new props after press "loadMore"
    console.log(this.props)
    return (
      <View style={{marginTop: 40}}>
        <Text onPress={this.props.loadMore}>Push me</Text>
      </View>
    )
  }
}

export default graphql(GetPosts, {
  options: () => ({
    variables: {
      offset: 0,
      limit: 1
    }
  }),
  props: ({ ownProps, data }) => {
    return {
      ...ownProps,
      posts: data.posts,
      loadMore: () => {
        return data.fetchMore({
          variables: {
            offset: 1,
            limit: 1
          },
          updateQuery: (previousResult, { fetchMoreResult }) => {            
            if (!fetchMoreResult) {
              return previousResult;
            }
            const newResult = Object.assign({}, previousResult, {
              posts: [...previousResult.posts, ...fetchMoreResult.posts]
            });
            console.log(newResult);
            return newResult;
          },
        })
      }
    };
  }
})(TestComponent);

编辑(4/11/17) 我没有解释我的查询GetPosts包含似乎可能是问题的联合类型,因为如果我删除它们,更新将按预期工作。我已经打开了一个包裹问题,希望更清晰:apollo docs

1 个答案:

答案 0 :(得分:-1)

为了重新渲染TestComponent,你已经改变了组件的状态。

你基本上可以做到

this.setState({

posts: [old values + new values],

})

然后在渲染功能中,您可以通过this.state.posts

调用它