我的 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()函数&lt;Button onPress={()=&gt;{router.place("/home")}}.

如有任何帮助,我将不胜感激.

推荐答案

这就是你如何做到这一点.

import {useIsFocused} from '@react-navigation/native';
import React, {useEffect, useState} from 'react';
import {View} from 'react-native';
const AllExpenseScreen = ({navigation}) => {
  const isFocused = useIsFocused();

  useEffect(() => {
    getUpdateDataFromDataBase();
  }, [isFocused]);

  getUpdateDataFromDataBase = () => {
    // Apply your logic Here
  };
  return <View></View>;
};

export default AllExpenseScreen;

React-native相关问答推荐

我可以在状态内有一个函数来响应吗?

redux-observable 您在预期流的地方提供了 undefined

如何在 React Native 中测量我的应用程序的数据使用情况?

Invariant Violation:requireNativeComponent: "RNCWebView" was not found in the UIManager

React Native Card Carousel 视图?

子视图覆盖的容器borderRadius,这是一个bug吗?

React-Native:save user preferences

如何在 React Navigation createStackNavigator 中更改字体系列

React Navigation - 标题的渐变 colored颜色

如何从 React Native 应用程序打开 Google Play store ?

使用离线包在 iOS 设备上运行 react-native 应用程序

React Nativedropped so far性能监视器计数不断增加

React Native ScrollView 在 iOS 上从底部被截断

ListView 和 FlatList 有什么区别?

ExpoKit 和 React Native 元素的区别

如何在react-native中关闭模态

单击平面列表中的侦听器

如何在 React 中将函数与钩子绑定?

如何在 react-native 中为带有图标的按钮建模

保存时 Visual Studio 代码格式化失败