2016-10-05 2 views
0

이 말은 저를 곤란하게합니다. 트래커 (Tracer.autorun) 함수를 사용하여 내 Mongo 구독이 질의 할 준비가되었는지를 들어 봅니다 (이전 Meteor subscribe callback에 대한 제안에 따라). 이것은 유성 구독이 준비되었음을 나타내는 몇 초 후에 트리거된다는 점에서 잘 작동하는 것 같습니다. 그러나 Tracker.autorun 함수 내에서 상태를 확인하려고하면 this.state가 정의되지 않습니다. 나는 명백한 것을 놓치고 있는가? 이것에 대한 더 좋은 패턴이 있습니까? 나는이 문제들에 점점 더 많이 빠져들고 있었고, 감수성으로 움직이기를 숙고하기 시작했습니다 ... 어떤 충고도 크게 감사했습니다 !! 나는이 같은 화살표 기능 유성 추적기 내 상태에 접근하고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

이 외에도

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

나는 생성자에서 내 상태를 초기화하고 componentWillMount()에 this.setState()로 설정

+1

감사합니다 grahan,이 완벽하게 작동합니다! 화살표 함수가 'this'에 대한 올바른 컨텍스트를 설정했기 때문에 이것이라고 생각합니다. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – ElJefeJames

+0

도움이 되셨 다행입니다. 그래, 사실이야, 내가이 정보를 놓친 것을 유감스럽게 생각한다. Meteor 메소드를 클라이언트에서 호출하고 그 결과를 컴포넌트의 상태로 설정하려는 경우에도 유용합니다. 그런 다음 Funktion 화살표를 사용하십시오. – grahan

관련 문제