在Blaze-Apollo和Meteor中,我们可以使用Tracker.autorun
来创建一个观察者函数,并在其中订阅和响应变量的变化。然而,有时候观察者可能不会触发订阅,这可能是因为订阅的依赖项没有被正确地设置。
下面是一个使用Blaze-Apollo和Meteor的代码示例,展示了如何通过在观察者内部手动触发订阅来解决这个问题:
import { ApolloClient } from 'apollo-client';
import { ApolloProvider, createMeteorNetworkInterface } from 'react-apollo';
import { Tracker } from 'meteor/tracker';
const networkInterface = createMeteorNetworkInterface({
uri: '/graphql',
});
const client = new ApolloClient({
networkInterface,
});
Tracker.autorun(() => {
const data = Session.get('myData'); // 假设我们依赖于Session变量'myData'
// 在这里手动触发订阅
client.subscribe({
query: YOUR_SUBSCRIPTION_QUERY,
variables: { data },
});
});
// 使用ApolloProvider包装你的组件
const App = () => (
);
在上面的示例中,我们使用Tracker.autorun
创建了一个观察者函数。在观察者函数内部,我们订阅了一个GraphQL订阅,并使用Session.get
获取变量值,这个变量是我们的依赖项。然后,我们手动触发订阅,传递变量作为订阅的参数。
这样,当依赖项发生变化时,观察者函数会重新运行,并触发订阅,从而确保观察者能够正确地订阅变量的变化。
请注意,上述示例中的createMeteorNetworkInterface
和YOUR_SUBSCRIPTION_QUERY
是根据你的具体需求而定的。你需要根据你的应用程序配置和GraphQL定义进行相应的调整。