いつもお世話になっております。
Firebaseと、Reactを使ってリアルタイムで更新されるアプリケーションを開発しています。
具体的に実現したいことは、同じページを2人がみているとして、1人がStateを更新すれば、もう1人側がみているStateもリアルタイムで更新されるような仕様を実現したいと考えています。
下記のコードで実装しているのですが、実際に1人がStateを更新した際にもう1人がみているStateもリアルタイムに更新するのですが、ここだとなぜか断続的にrenderStatus
がまわり続けてしまい、かなり重くなってしまいます。
JavaScript
1class Post extends Component { 2 constructor(props) { 3 super(props); 4 this.state = { 5 to_status: false, 6 from_status: false 7 }; 8 } 9 10 // ここでRDBのstatusを変更する 11 handleSatus = () => { 12 const { post } = this.props; 13 firebase 14 .database() 15 .ref("/busy/" + post.uid) 16 .set({ 17 status: true, 18 last_changed: firebase.database.ServerValue.TIMESTAMP 19 }); 20 this.setState({ to_status: true }); 21 }; 22 23 renderStatus() { 24 const { post } = this.props; 25 const { to_status, from_status } = this.state; 26 27 // ここでRDBのstatusを取得する 28 let self = this; 29 firebase 30 .database() 31 .ref("/busy/" + posy.uid) 32 .once("value") 33 .then(function(snapshot) { 34 self.setState({ from_status: snapshot.val().status }); 35 }); 36 37 if (this.state.from_status) { 38 return ( 39 <p>変更されました</p> 40 ); 41 } else { 42 return ( 43 <p>変更されていません</p> 44 ); 45 } 46 } 47 48 render() { 49 return ( 50 <div> 51 {this.renderStatus()} 52 <button onClick={this.handleStatus()}>クリック</button> 53 </div> 54 ) 55 }
変更された時だけrenderStatus()
を更新するような良いやり方はないでしょうか?
お知恵を拝借させていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー