SQLiteデータベースからデータを抽出して、別ページでFlatListで表示する
App.js
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View } from "react-native";
import HomeScreen from "./screens/HomeScreen";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import SecondScreen from "./screens/SecondScreen";
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen component={HomeScreen} name="HomeScreen" />
<Stack.Screen component={SecondScreen} name="SecondScreen" />
</Stack.Navigator>
</NavigationContainer>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
screens/HomeScreen.js
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View, Button } from "react-native";
import { useState } from "react";
export default function HomeScreen({ navigation }) {
const [items, setItems] = useState();
const createTable = () => {
db.transaction(
(tx) => {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS Height(id integer primary key not null, name text not null, height text not null); ",
null,
() => {
console.log("CREATE TABLE Success.");
},
() => {
console.log("CREATE TABLE Failed.");
return true;
}
);
},
() => {
console.log("Failed All.");
},
() => {
console.log("Succces All.");
}
);
};
const addItem = () => {
db.transaction(
(tx) => {
tx.executeSql(
"INSERT INTO Height (id, name, height) VALUES (?,?,?);",
[1, "ikeda", "174cm"],
() => {
console.log("INSERT TABLE Success.");
},
() => {
console.log("INSERT TABLE Failed.");
return true;
}
);
},
() => {
console.log("Failed All.");
},
() => {
console.log("Succces All.");
}
);
};
const selectItem = () => {
db.transaction(
(tx) => {
tx.executeSql(
"SELECT * FROM Height; ",
,
(_, 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;
const height = items[i].height;
console.log(`${id}:${name}:${height}`);
}
},
() => {
console.log("SELECT TABLE Failed.");
return false;
}
);
},
() => {
console.log("Failed All.");
},
() => {
console.log("Succces All.");
}
);
};
return (
<View>
<Text>HomeScreen</Text>
<Button title="CREATE TABLE" onPress={createTable} />
<Button title="ADD ITEM" onPress={addItem} />
<Button title="SELECT ITEM" onPress={selectItem} />
<View style={{ marginTop: 100 }}>
<Button
title="Next Page"
onPress={() => navigation.navigate("SecondScreen", { items: items })}
/>
</View>
</View>
);
}
screens/SecondScreen.js
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View, Button, FlatList } from "react-native";
import { useState } from "react";
const renderItem = ({ item }) => {
return (
<View>
<Text>{item.name}</Text>
<Text>{item.height}</Text>
</View>
);
};
export default function SecondScreen({ route }) {
const { items } = route.params;
return (
<View>
<Text>SecondScreen</Text>
<FlatList data={items} renderItem={renderItem} />
</View>
);
}
次に、flatlistから、react-native-draglistへ変更する。