質問編集履歴
2
非同期処理でのタイミングにずれがある事を認識できたのですが、自動同期を上手く実装する事ができておりません。どなたかご教示頂けないでしょうか
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
firebaseから取得
|
1
|
+
非同期処理firebaseからの取得の前にrenderされてしまい、コンポーネントに上手く値を渡す事が出来ておりません。firebaseから値を取得するまではLoadingを表示し、取得が完了すると同時に画面を切り替える様にしたいのですが、下記のコードでは何が足りないかをご教示頂けないでしょうか
|
2
2
|
|
3
3
|
firebaseのデータ
|
4
4
|
-----
|
@@ -25,30 +25,29 @@
|
|
25
25
|
N2:[],
|
26
26
|
N3:[]
|
27
27
|
};
|
28
|
-
|
29
|
-
|
28
|
+
UNSAFE_componentWillMount(){
|
30
29
|
firebase.database().ref("N3")
|
31
|
-
|
30
|
+
.on(("value"),async (snapshot)=>{
|
32
|
-
.then((snapshot)=>{
|
33
|
-
|
31
|
+
snapshot.forEach((childSnapshot)=>{
|
34
|
-
|
32
|
+
this.setState(()=>{
|
35
|
-
|
33
|
+
N3: this.state.N3.push({
|
36
|
-
|
34
|
+
id: childSnapshot.key,
|
37
|
-
|
35
|
+
...childSnapshot.val()
|
38
|
-
|
36
|
+
})
|
37
|
+
});
|
39
38
|
});
|
39
|
+
console.log(this.state.N3)
|
40
40
|
});
|
41
|
-
console.log(this.state.N3[0].title);`ここでは欲しいものが表示されます`
|
42
|
-
});
|
43
|
-
|
41
|
+
}
|
44
42
|
|
45
43
|
render(){
|
46
|
-
|
47
|
-
|
44
|
+
if(!this.state.N3[0]){
|
48
|
-
|
45
|
+
return <div>Loading</div>;
|
46
|
+
}
|
47
|
+
|
49
48
|
return(
|
50
49
|
<div>
|
51
|
-
{this.state.N3[0].title}
|
50
|
+
{this.state.N3[0].title}
|
52
51
|
</div>
|
53
52
|
)
|
54
53
|
};
|
1
インラインにてエラー部分を明記させていただきました。どなたか問題点についてご教示頂けますと幸いです
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
firebaseから取得したデータをjsxで表示できない
|
body
CHANGED
@@ -1,9 +1,22 @@
|
|
1
|
-
firebase
|
1
|
+
firebaseから取得したデータをreact componentで表示したいのですがundefinedが返され上手く表示されません。上手くデータが同期されていない様に思うのですが、どなたかご教示いただく事は出来ないでしょうか。
|
2
2
|
|
3
|
+
firebaseのデータ
|
3
4
|
-----
|
5
|
+
database.ref("N3").push(
|
6
|
+
{
|
7
|
+
description: "結論を述べる",
|
8
|
+
example: "彼は真面目なので、よく勉強する",
|
9
|
+
memo: "理由をしめしたい",
|
10
|
+
title: "〜なので",
|
11
|
+
voice: ""
|
12
|
+
}
|
13
|
+
);
|
14
|
+
------
|
15
|
+
|
16
|
+
javascript
|
17
|
+
------
|
4
18
|
import React from 'react';
|
5
19
|
import * as firebase from 'firebase';
|
6
|
-
import N3Grammer from './N3Grammer';
|
7
20
|
|
8
21
|
class Grammer extends React.Component {
|
9
22
|
state =
|
@@ -13,19 +26,8 @@
|
|
13
26
|
N3:[]
|
14
27
|
};
|
15
28
|
|
16
|
-
render(){
|
17
|
-
let database = firebase.database();
|
18
|
-
database.ref("N3").push(
|
19
|
-
{
|
20
|
-
description: "結論を述べる",
|
21
|
-
example: "彼は真面目なので、よく勉強する",
|
22
|
-
memo: "理由をしめしたい",
|
23
|
-
title: "〜なので",
|
24
|
-
|
29
|
+
componentDidMount(){
|
25
|
-
}
|
26
|
-
);
|
27
|
-
|
28
|
-
database.ref("N3")
|
30
|
+
firebase.database().ref("N3")
|
29
31
|
.once("value")
|
30
32
|
.then((snapshot)=>{
|
31
33
|
snapshot.forEach((childSnapshot)=>{
|
@@ -36,16 +38,17 @@
|
|
36
38
|
})
|
37
39
|
});
|
38
40
|
});
|
41
|
+
console.log(this.state.N3[0].title);`ここでは欲しいものが表示されます`
|
39
42
|
});
|
43
|
+
}
|
40
44
|
|
45
|
+
render(){
|
46
|
+
|
41
|
-
console.log(this.state.N3);
|
47
|
+
console.log(this.state.N3[0].title);`undefinedと表示されてしまいます`
|
42
|
-
|
43
|
-
|
48
|
+
|
44
|
-
console.log(sample); //undefinedが返される
|
45
|
-
|
46
49
|
return(
|
47
50
|
<div>
|
48
|
-
|
51
|
+
{this.state.N3[0].title}`何も表示されません`
|
49
52
|
</div>
|
50
53
|
)
|
51
54
|
};
|