ofe*_*ila 3 javascript reactjs react-native react-native-android react-navigation
我有一个简单的疑问,希望有人能帮助我。我有一个简单的应用程序,它有一个主屏幕,其中加载我从 SQLite 数据库获得的所有数据,但是,当我转到“添加到数据库屏幕”并在数据库中添加一些数据和记录时,我使用了一个函数返回上一屏幕 ( props.navigation.goBack())。
不幸的是,当我到达屏幕 A 时,我的钩子不会“刷新”或更新数据库中的数据。有没有办法让它刷新屏幕A以重新调用数据库并使用新数据刷新数据?
ps:为了调用数据库,我使用今天的日期来获取查询中的数据,所以我的日期不会更新。
这是我的代码:
ScreenA.js
import React, { useEffect, useState } from 'react';
import { View, TouchableOpacity, Text } from 'react-native';
export default function ScreenA() {
const [data, setData] = useState([]);
useEffect(() => {
setData(getDataFromApi())
}, []);
return(
<View>
{ apiResponse() }
<TouchableOpacity onPress={() => { props.navigation.navigate('ScreenB') }}
<Text>Add data</Text>
</TouchableOpacity>
</View>
)
}
Run Code Online (Sandbox Code Playgroud)
这是 ScreenB.js
import React, { useEffect } from 'react';
import { View, TouchableOpacity, Text } from 'react-native';
export default function ScreenB() {
function goBackToScreenA() {
addDataToDatabase();
props.navigation.goBack();
}
return(
<View>
<TouchableOpacity onPress={() => { goBackToScreenA() }}>
<Text>Go Back</Text>
</TouchableOpacity>
</View>
);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 reactnavigation 那么您可以订阅导航生命周期
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
// Screen was focused
// Do something
});
return unsubscribe;
}, [navigation]);
Run Code Online (Sandbox Code Playgroud)
https://reactnavigation.org/docs/navigation-lifecycle
我通过杀死进入 ScreenB 的组件来修复这个错误,我只使用props.navigation.replace('ScreenB')insted use navigate。因此,当我回到 ScreenA 时,它只是再次加载 ScreenA。就像第一次一样。在我做同样的事情中,将数据添加到数据库后goBack()更改返回。replace('ScreenA')
| 归档时间: |
|
| 查看次数: |
3727 次 |
| 最近记录: |