2016-08-28 14 views
5

में फायरबेस वादा के साथ सेटस्टेट मैं प्रतिक्रिया घटक के अंदर राज्य कैसे सेट कर सकता हूं?रिएक्ट

Uncaught TypeError: Cannot read property 'setState' of null

यहाँ

घटक कोड सूची है:

class MessageList extends React.Component { 
constructor(props){ 
super(props); 
this.state = { 
    messages: [] 
}; 

var firebaseRef = firebase.database().ref(); 
firebaseRef.once('value') 
    .then(function(dataSnapshot) { 
     this.setState({ 
     messages: messages 
     }); 
    }); 
} 

render() { ... } 

} 
+0

मुझे माफ करना, @ बेंजामिन gruenbaum, लेकिन मेरा मतलब मैं क्यों सके firebase से डेटा प्राप्त है, और "इस" नहीं के बारे में कुंजी शब्द –

+0

आपकी बग 'इस 'कीवर्ड की वजह से है। मैं इसे अपूर्ण या डुप्लिकेट के रूप में बंद कर सकता हूं - आपके लिए और भविष्य के आगंतुकों के लिए मुझे लगता है कि इसे डुप्लिकेट के रूप में बंद करना बेहतर है। –

उत्तर

11

इसवादा गुंजाइश के लिए बात कर रहा है

मैं `ve त्रुटि संदेश मिला। या तो वसा तीर कार्य (ES6)

var firebaseRef = firebase.database().ref(); 
firebaseRef.once('value') 
    .then((dataSnapshot) => { 
     this.setState({ 
     messages: messages 
     }); 
    }); 

का उपयोग या

constructor(props){ 
super(props); 
this.state = { 
    messages: [] 
}; 
var that = this; 
var firebaseRef = firebase.database().ref(); 
firebaseRef.once('value') 
    .then(function(dataSnapshot) { 
     that.setState({ 
     messages: messages 
     }); 
}); 

एक आखिरी विकल्प वादा करने से पहले इस की एक प्रतिलिपि बनाते हैं, आप वादा करने के लिए इस बाँध सकता है:

firebaseRef.once('value') 
.then(function(dataSnapshot) { 
    this.setState({ 
     messages: messages 
    }); 
}).bind(this) 
+0

यह बहुत अच्छा काम कर रहा है। धन्यवाद। – Neela

2

सबसे पहले, मैं आपको सुझाव देना चाहता हूं कि आप अपने प्रारंभिक firebase डेटा componentDidMount घटक जीवन चक्र में लाने और अपने setState को ठीक करने के लिए मुद्दा तुम कहाँ मैं self = this; लाइन केवल बदल गया है में नीचे दिए गए कोड का पालन कर सकते,

class MessageList extends React.Component { 
constructor(props){ 
super(props); 
this.state = { 
    messages: [] 
}; 

componentDidMount() { 
var self = this; 
var firebaseRef = firebase.database().ref(); 
    firebaseRef.once('value') 
    .then(function(dataSnapshot) { 
    self.setState({ 
     messages: messages 
    }); 
    }); 
} 
} 

render() { ... } 

}