我的 react native 应用程序中有两个页面.每次我路由到该页时,我的应用程序都会调用数据库,但在我向数据库添加新记录并返回上一页后,它只显示以前加载的记录,新记录仅在应用程序重新启动后出现.我try 使用FocusEffect,但它根本不加载数据库.我使用的是EXPO v49.
这是我的index.js文件
const router = useRouter();
const StackNav = createStackNavigator();
export default function App() {
const [value, setValue] = useState();
const { getItem, setItem } = useAsyncStorage("@savedLogin");
const readItemFromStorage = async () => {
const item = await getItem();
setValue(item);
};
useEffect(() => {
readItemFromStorage();
}, []);
return Platform.OS === "web" ? (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text style={Styles.heading}>{i18n.t("expoIsNotSupportedAlert")}</Text>
</View>
) : value === null ? (
<StackNav.Navigator>
<StackNav.Screen
options={{ headerShown: false }}
name="Login"
component={LoginScreen}
/>
<StackNav.Screen
options={{ headerShown: false }}
name="Register"
component={RegisterScreen}
/>
</StackNav.Navigator>
) : (
<StackNav.Navigator>
<StackNav.Screen
options={{ headerShown: false }}
name="Home"
component={HomeScreen}
/>
<StackNav.Screen
options={{ headerShown: false }}
name="Add Meters"
component={AddMeters}
/>
<StackNav.Screen
options={{ headerShown: false }}
name="Add Readings"
component={AddReadings}
/>
<StackNav.Screen
options={{ headerShown: false }}
name="Readings"
component={ReadingScreen}
/>
</StackNav.Navigator>
);
}
这是我调用数据库的主页
const [value, setValue] = useState(null);
const { getItem, setItem } = useAsyncStorage("@id");
const readItemFromStorage = async () => {
const item = await getItem();
setValue(item);
};
useEffect(() => {
readItemFromStorage();
console.log("Called");
db.transaction((tx) => {
tx.executeSql(
`SELECT * FROM meters where meters.userID="${value}";`,
[],
(_, { rows: { _array } }) => {
setMeters(_array);
console.log(_array);
}
);
});
console.log(value);
}, [value]);
当我将记录添加到数据库时,我从"expo-Router"的导入{Router}调用router.place()函数<;Button onPress={()=>;{router.place("/home")}}.
如有任何帮助,我将不胜感激.