2016-11-12 10 views
1

meteor apolloスターターキットhttps://github.com/apollostack/meteor-starter-kit を使用して開始し、コレクション「投稿」を作成してUIにデータを取り込めます。しかし、mongoコンソールからコレクションを更新すると、自動的にUIが更新されていません...いくつかの設定が欠落していますか?誰でも私をここで助けることができますか?ここでMeteor Apollo Mongoコンソールからコレクションを更新するときにUIを更新しない

は、コードは次のとおりです。

スキーマとリゾルバ:

import {Random} from 'meteor/random'; 

const Posts = new Mongo.Collection('posts'); 
export const typeDefs = [` 

    type Post { 
    _id: String 
    title: String 
    } 


    type Query { 
    myPosts: [Post] 
    } 

    schema{ 
    query: Query 
    } 

`]; 

export const resolvers = { 
    Query: { 
     myPosts(root, args) { 
      return Posts.find().fetch(); 
     } 

    }, 
    Post: { 
     title: ({title}) => title 
    } 
}; 

アプリケーションコンポーネント:

import React, {Component} from 'react'; 
import {graphql} from 'react-apollo'; 
import {Meteor} from 'meteor/meteor'; 
import {createContainer} from 'meteor/react-meteor-data'; 
import gql from 'graphql-tag'; 

const App = ({userId, loading, error, myPosts, refetch}) => { 
    return (
     <div>{userId} 
      <button onClick={() => refetch()}>Refetch!</button> 
      {myPosts && myPosts.map((post, index) => { 
       return (
        <div key={index}>{post.title}</div> 
       ); 
      })} 
     </div> 
    ); 

}; 

App.propType = { 
    userId: React.PropTypes.string.isRequired, 
    posts: React.PropTypes.Object, 
    refetch: React.PropTypes.func 
}; 

const GET_USER_DATA = gql ` 
    { 
    myPosts{ 
     title 
    } 
    } 
`; 

const withData = graphql(GET_USER_DATA, { 
    props: ({data}) => { 
     console.log(data); 
     const {loading, error, myPosts, variables, refetch} = data; 

     if (loading) 
      return {loading}; 
     if (error) 
      return {error}; 
     return {myPosts, refetch}; 

    }, 
    options: (ownProps) => ({ 
     variables: { 
      id: "myownvariable" 
     } 
    }) 
}); 

const AppWithData = withData(App); 

const AppWithUserId = createContainer(() => { 
    return {userId: "sampleuserid"}; 
}, AppWithData); 

export default AppWithUserId; 

クライアント/ main.js

import {Meteor} from 'meteor/meteor'; 
import {render} from 'react-dom'; 
import React from 'react'; 

import ApolloClient from 'apollo-client'; 
import {meteorClientConfig} from 'meteor/apollo'; 
import {ApolloProvider} from 'react-apollo'; 

import App from '/imports/ui/App'; 

const client = new ApolloClient(meteorClientConfig()); 

Meteor.startup(() => { 
    render(
     <ApolloProvider client={client}> 
     <App/> 
    </ApolloProvider>, document.getElementById('app')); 
}); 

サーバ/メイン。 js

import {createApolloServer} from 'meteor/apollo'; 
import {makeExecutableSchema, addMockFunctionsToSchema} from 'graphql-tools'; 

import {typeDefs, resolvers} from '/imports/api/schema'; 

const schema = makeExecutableSchema({typeDefs, resolvers}); 

createApolloServer({schema}); 

答えて

1

Meteor pubsubとは異なり、Apolloはデフォルトでクライアントに更新を送信しません。あなたはこれらのいずれかの方法を使用してそれを設定することができます:あなたの答えのための

http://dev.apollodata.com/react/receiving-updates.html

+0

感謝を。リンクhttp://dev.apollodata.com/react/receiving-updates.htmlは私の問題を解決するのを助けました。私のケースでは –

+0

でポーリングは正常に機能しましたが、サブスクリプションの使用方法を理解できませんでした。流星アポロの実例はありますか?助けが大変ありがとう! –

+0

私はそれをやっていませんが、これらの関数の引数で必要なものをすべて設定できるはずです:http://dev.apollodata.com/core/meteor.html#API – Loren

関連する問題