我正在React Native(expo(中创建一个应用程序。用户第一次使用该应用程序时将显示a以选择他想要的语言,当他选择一种语言时,他在该应用程序中输入的下一次将不再出现。
这是我的代码:
db.transaction(function (tx) {
//comando SQL modificável
tx.executeSql(
"SELECT language FROM settings",
[],
(tx, results) => {
console.log("Results: " + results.rows.length)
if(results.rows.length == 0){
console.log("Não tem nenhuma row")
}
else{
console.log("tem uma row")
}
},
//-----------------------
);
});
如何在第一个if((中返回View,并在else中返回other。请记住,如果我在db.transaction中返回一些内容,我会得到一个错误,即渲染中没有返回任何内容。
我认为db.transaction是异步的,因此您可能需要利用promise/延迟返回技术来返回此代码块中的View。
这是一个想法。创建一个占位符状态变量,该变量被注入到组件的视图中。。。然后在sql异步返回时,将其内容操作为您想要的任何内容。
最初,jsx变量将为null,并且基本上不存在。。但在promise返回后,它将是您想要的任何Jsx(视图、文本等(。
你可以用很多方法来分割你的观点,但这里是基本的方法。我只是用文本保持简单。。。
function someComponent(props) {
let [ viewJsx, setViewJsx] = React.useState(null);
db.transaction(function (tx) {
//comando SQL modificável
tx.executeSql(
"SELECT language FROM settings",
[],
(tx, results) => {
console.log("Results: " + results.rows.length)
if(results.rows.length == 0){
console.log("Não tem nenhuma row")
setViewJsx(<Text>No row found</Text>);
}
else{
console.log("tem uma row")
setViewJsx(<Text>Found a row</Text>);
}
},
//-----------------------
);
return (
<View>
<Text>This is my component. The next element will not show up until sqlLite promise transaction is complete..</Text>
{viewJsx}
</View>
);
}