在我的React-native应用程序中,我有一个屏幕,当用户按下按钮提交答案时,我想要一个警告对话框,告诉他们答案是正确还是不正确.所以,我onPress
在TouchableHighlight
按钮的方法中调用一个函数,在该函数中我指定了警告对话框.但是,这会导致"警报"对话框一遍又一遍地重新出现,因为在每个帧中连续调用该函数.如何让函数只被调用一次?
相关代码:渲染功能
render: function() {
return (
<View style={styles.container}>
<Text style={styles.title}>{this.state.title}</Text>
<TouchableHighlight style = {styles.button}
onPress={this.onSubmitPressed()}
underlayColor='#99d9f4'>
<Text style = {styles.buttonText}>SUBMIT</Text>
</TouchableHighlight>
</View>
);
},
Run Code Online (Sandbox Code Playgroud)
验证功能:
onSubmitPressed: function() {
if (this.checkSolution) {
Alert.alert(
'Alert title',
"Correct!"
);
}
else {
Alert.alert(
'Alert title',
"Incorrect!"
);
}
},
Run Code Online (Sandbox Code Playgroud) 我不明白我当前遇到的流程错误。我有一个Javascript对象object(dataObject
),我想将其转换为对象数组,因此可以使用Object.values(dataObject)
。然后,我使用以下方法遍历数组中的每个对象:
const dataObjectArray = Object.values(dataObject);
return dataObjectArray((data: DataObject) => {
const { typeA, typeB } = data;
return {
TYPE_A: typeA,
TYPE_B: typeB,
};
});
Run Code Online (Sandbox Code Playgroud)
但是我收到以下流类型错误:
我不确定如何匹配类型。目前,我的DataObject流类型是
type DataObject = {
typeA: string,
typeB: string,
};
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。谢谢!
I\xe2\x80\x99m 编写一个函数,该函数接受父对象data
和一个字符串inputString
,该字符串可能包含也可能不包含点符号来表示嵌套对象(即 \xe2\x80\x98nestedObject.itemA)。该函数应将inputString
的属性设置data
为随机字符串。如果字符串inputString
是嵌套对象,则该函数应将nested object\xe2\x80\x99s 值设置为随机字符串。我可以\xe2\x80\x99t弄清楚如何在for循环中处理这一切。我想做这样的事情:
split_objects = value.split(\xe2\x80\x9c.\xe2\x80\x9d)\nfor item in split_objects:\n data.__setattr__(item, get_random_string())\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,对于嵌套对象,上面的代码会将嵌套对象设置为随机字符串,而不是内部的字段。有人可以帮助我处理这两种情况的语法吗?预先感谢\xe2\x80\xa6
\n单击我的react Native应用程序中的按钮后,我调用两个函数:getSolutionListFromDatabase
,它设置组件的状态以包含此解决方案列表,然后updateDatabaseSolutionList
,它将一个元素添加到此列表并将其推送回Firebase.但是,尽管在第一个函数中正在更新应用程序的状态,但在第二个函数中,状态被记录为未定义,并且在第一个函数中的某些语句之前调用了该函数的日志语句.这些函数是出于某种原因而异步运行的,这是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
},
Run Code Online (Sandbox Code Playgroud) ios firebase reactjs react-native firebase-realtime-database
ios ×2
react-native ×2
reactjs ×2
alert ×1
dialog ×1
firebase ×1
flow-typed ×1
flowtype ×1
for-loop ×1
javascript ×1
nested ×1
python ×1
split ×1