GraphQL的Apollo不会返回所需的数据

时间:2018-01-02 10:40:05

标签: javascript graphql apollo graphql-js react-apollo

在我的应用程序中,当我将新数据插入输入字段并触发变异时。数据存储在Db(MongoDB)中,但Apollo不会返回更新的数据。 在初始加载时,根据React组件代码检索和显示数据(即'song'属性)。然而,当一个新的内容通过突变和推动时,它随后的数据更新是必需的,Apollo不会返回'song'属性&amp;这将加载下面的React组件代码的<div>loading...</div>行。刷新页面时解决了错误。

我的React组件是:

class SongDetail extends Component{
   render(){
      const { song } = this.props.data;
      console.log( "song details are...", this.props, "---", song );
      if( !song ) return <div>loading...</div>;
      return(
         <div>
            <Link to = "/">Back</Link>
            <h3>{ song.title }</h3>
            <LyricList lyrics = { song.lyrics }/>
            <LyricCreate songId = { this.props.params.id }/>
         </div>
      );
   }
}

export default graphql( fetchSong, {
   options : ( props ) => {
      return { variables : { id : props.params.id }};
}})( SongDetail );

'fetchSong'查询如下:

const fetchSong = gql`
   query fetchSong( $id : ID! ){
      song( id : $id ){
         id,
         title,
         lyrics {
            id,
            content
         }
      }
   }
`;

我正在使用配置选项在商店中映射id

const client = new ApolloClient({
   dataIdFromObject : o => o.id
});
...
      <ApolloProvider client = { client }>
...

我不确定哪些更多信息会对该应用有所帮助。重申我上面写的内容: LyricCreate组件通过mutation查询成功将新内容存储到商店中。但是,在存储新的歌词内容后,Apollo不会通过检索song属性进行更新。

1 个答案:

答案 0 :(得分:-1)

您的代码看起来不错,但为什么要使用i = 2 if i == 2: print(str(i) + "is a prime no") i = i+1 c=1 while c<10: for j in range(2, i): if i%j==0: break if i == j+1: print(str(i) + "is aa prime no") c=c+1 i=i+1 ? 也许我们应该尝试:

if( !song ) return <div>loading...</div>;