如果数据库中存在表,则返回视图



我正在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>
);

}

最新更新