2016-10-05 5 views
0

これは私を困惑させてしまいました。私はMongoのサブスクリプションがクエリの準備ができているかどうかを聞くためにTracker.autorun関数を使用しています(この前の提案ではMeteor subscribe callback)。これは、メテオサブスクリプションが準備ができていることを示す、数秒後にトリガするという点ではうまくいくようです。しかし、Tracker.autorun関数内で状態をチェックしようとすると、this.stateは未定義です。私は明白な何かを欠いていますかこれにはより良いパターンがありますか?私はこれらの問題のますます多くを実行してきたとreduxに移動することを熟考し始めて...任意のアドバイスが大いに感謝!Tracker.AutorunのReact状態にアクセスできないのはなぜですか?

export default class BulkMapWrapper extends TrackerReact(React.Component) { 

constructor() { 
super(); 
this.state = { 
    } 

} 

componentDidMount(){ 
const subscription = Meteor.subscribe("allAuthors",{sort: {_id:-1}}) 
this.state = { 
ready: subscription.ready(), 
authorData: subscription 
} 

Tracker.autorun(function(){ 
if (subscription.ready()) { 
    console.log("the subscription is ready"); 
    console.log(this.state) //this is undefined 
} 

答えて

1

私はこのような矢印の機能と流星トラッカーで私の状態にアクセスしています:componentWillMount()に)私はコンストラクタで私の状態を初期化してthis.setState(でそれらを設定し、このほかに

Tracker.autorun(() => { 
    if (subscription.ready()) { 
     console.log("the subscription is ready"); 
     console.log(this.state) //this is undefined 
    } 
}); 

+1

グラハンさんありがとうございます、これは完璧に動作します!これは、矢印関数が 'this'の正しいコンテキストを設定しているからだと思います。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – ElJefeJames

+0

あなたを助けてくれてうれしいです。うん、それは本当です、私はこの情報を見逃して申し訳ありません。また、クライアントからMeteorメソッドを呼び出し、その結果をコンポーネントの状態として設定したい場合にも役立ちます。次に、矢印Funktionを使用します。 – grahan

関連する問題