データベースとしてexpo-sqliteライブラリを使用し、BottomTabを使用し、そのタブの一つに、そのデータの一覧をリスト表示します。
下記HPからコードを結構引用させてもらってます。
【React Native+Expo】Expoでデータベース(SQLite)の使い方 | CommentOut (comment-out.net)
データベース処理やAPI処理を非同期を意識しないで、とりあえず組み立てたいときに、ボタンを利用するのは、どのプログラミング言語でもあるあるです。
First.js
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View, Button} from 'react-native';
import { useState } from 'react';
export default function First({navigation}) {
const [items, setItems] = useState();
return (
<View style={styles.container}>
<Text>Open up App.js to start working on your app!</Text>
<Button
title="CREATE"
onPress={() => {
db.transaction((tx) => {
// 実行したいSQL
tx.executeSql(
"CREATE TABLE IF NOT EXISTS Hawks(id integer primary key not null, name text);",
null,
() => {
// 成功時のコールバック
console.log("CREATE TABLE Success.");
},
() => {
// 失敗時のコールバック
console.log("CREATE TABLE Failed.");
});
},
() => { console.log("Failed All."); },
() => { console.log("Success All."); }
);
}} />
<StatusBar style="auto" />
<Button
title="ADD_1"
onPress={() => {
db.transaction((tx) => {
// 実行したいSQL
tx.executeSql(
"INSERT INTO Hawks(id, name) VALUES(?, ?);",
() => {
// 成功時のコールバック
console.log("INSERT TABLE Success.");
},
() => {
// 失敗時のコールバック
console.log("INSERT TABLE Failed.");
});
},
() => { console.log("Failed All."); },
() => { console.log("Success All."); }
);
}} />
<Button
title="ADD_2"
onPress={() => {
db.transaction((tx) => {
// 実行したいSQL
tx.executeSql(
"INSERT INTO Hawks(id, name) VALUES(?, ?);",
() => {
// 成功時のコールバック
console.log("INSERT TABLE Success.");
},
() => {
// 失敗時のコールバック
console.log("INSERT TABLE Failed.");
});
},
() => { console.log("Failed All."); },
() => { console.log("Success All."); }
);
}} />
</View>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
App.js
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { StyleSheet, Text, View, Button, FlatList } from 'react-native';
import First from './First';
import { NavigationContainer } from '@react-navigation/native';
const Tab = createBottomTabNavigator();
const renderItem = ({item}) => {
return(
<View>
<Text>{item.name}</Text>
</View>
)
}
function Second({navigation}){
return(
<View>
<Text>Second</Text>
<Button
title="SHOW"
onPress={() => {
db.transaction((tx) => {
// 実行したいSQL
tx.executeSql(
"SELECT * FROM Hawks;",
,
(_, resultSet) => {
// 成功時のコールバック
setItems(resultSet.rows._array);
console.log(`件数:${items.length}件`);
for (let i=0; i<items.length; i++) {
const id = items[i].id;
const name = items[i].name;
console.log(`${id}:${name}`);
}
},
() => {
// 失敗時のコールバック
console.log("SELECT TABLE Failed.");
});
},
() => { console.log("Failed All."); },
() => { console.log("Success All."); }
);
}} />
<FlatList
data={items}
renderItem={renderItem}/>
</View>
);
}
export default function App() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="First" component={First}/>
<Tab.Screen name="Second" component={Second}/>
</Tab.Navigator>
</NavigationContainer>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});