反応ネイティブアプリのボタンをクリックすると、このソリューションリストを含むようにコンポーネントの状態を設定するgetSolutionListFromDatabase
と、このリストに要素を追加してFirebaseに戻すupdateDatabaseSolutionList
という2つの関数が呼び出されます。しかし、アプリケーションの状態は最初の関数内で正しく更新されていますが、2番目の関数では状態は未定義として記録されており、その関数のログ文は最初の関数のいくつかの文の前に呼び出されています。何らかの理由で関数が非同期で動作しているのですが、これはReactネイティブの機能ですか?もしそうなら、どのようにして状態が設定されるまで第2の関数が実行されるのを防ぐことができますか?ありがとう。React-nativeは、関数が非同期に実行されるのを防ぎますか?
onSubmitPressed: function() {
if (this.checkSolution) {
this.getSolutionListFromDatabase();
this.updateDatabaseSolutionList();
Alert.alert(
'Correct!',
"Woohoo!"
);
}
},
getSolutionListFromDatabase: function() {
var thisItemRef = itemsListRef.child(this.state.itemID);
thisItemRef.once('value', (snap) => {
var solutionList = snap.val();
this.setState({
solutionList: solutionList
});
console.log('solution is set as' + this.state.solutionList);
});
},
updateDatabaseSolutionList: function() {
var newSolutionList = [];
console.log('solutionList undefined here' + this.state.solutionList);
if (this.state.solutionList) {
newSolutionList = this.state.solutionList;
newSolutionList.push(this.props.itemID);
}
//then push new list to Firebase
},
ヒントをありがとう。 snap.val()を返すだけで、次の関数に直接solutionListを渡そうとすると、関数内のsnap.valに正しい値を記録していても、関数は未定義として返します。ここで何が起きているのでしょうか? – user3802348