以下のリアクションコードは、初めてFirebaseからデータスナップショットを取得します。 this.state.term
は、Firebaseデータベース内のノードのインデックスを指します。私のhandleChoice
関数はthis.setState
ですが、新しいデータスナップショットを取得するためにこのコンポーネントを再描画しているようではありません。リアクションコンポーネントがFirebaseデータを取得するために再レンダリングされない
this.state.term
の値はcomponentDidMount
の下で変更されません。しかし、私がコンソールでそれをレンダリングでログアウトすると、それが実行されます。
import React, { Component } from 'react';
import NavBar from './navbar.js';
import TermInfo from './termInfo.js';
import * as firebase from 'firebase';
import './App.css';
class App extends Component {
constructor(){
super();
this.state = {
term: 66, //sample term to load first
examples: [1,2,3],
dataNode: {},
}
}
componentDidMount(){
let rootRef = firebase.database().ref('vocab/').child(this.state.term);
rootRef.on('value', snap => {
this.setState({
dataNode: snap.val(),
examples: Object.assign([], snap.val().examples)
});
});
}
_handleChoice(theChosenOne){
this.setState({
term: theChosenOne
});
}
render() {
console.log(this.state.term); //this gives me the right index
return (
<div className="App">
<div className="App-header">
<NavBar choose={this._handleChoice.bind(this)}/>
</div>
<div className='container'>
<div className="jumbotron"><TermInfo node={this.state.dataNode} examples={this.state.examples}/>
<p className="App-intro">
Enter a vocabulary term to search for and add examples!
</p></div>
</div></div>
);
}
}
export default App;
なぜデータを再レンダリングせずに取り込みませんか?
ありがとう:
だから、私たちのコンポーネントは次のようになります。私は全然ノブです。これは魅力的に機能しました。 –