Reactjs 当我从屏幕B返回到屏幕A时,如何重新播放屏幕A?
预期的行为:Reactjs 当我从屏幕B返回到屏幕A时,如何重新播放屏幕A?,reactjs,react-native,react-native-android,react-native-ios,Reactjs,React Native,React Native Android,React Native Ios,预期的行为: 屏幕A单击导航到屏幕B->最后导航到屏幕C 屏幕C将数据设置为异步存储->BackHandler导航到屏幕A 屏幕A检查状态的更改,并使用更改重新启动屏幕 但是 在我重新加载或手动进行任何更改之前,屏幕A不会重新加载 屏幕显示一个useffect()代码: 屏幕C后台处理程序代码: useEffect(() => { retreiveData(); BackHandler.addEventListener('hardwareBackPress', hand
- 屏幕A单击导航到屏幕B->最后导航到屏幕C
- 屏幕C将数据设置为异步存储->BackHandler导航到屏幕A
- 屏幕A检查状态的更改,并使用更改重新启动屏幕
useEffect(() => {
retreiveData();
BackHandler.addEventListener('hardwareBackPress', handleBackButtonOnnclick);
return () => {
BackHandler.removeEventListener(
'hardwareBackPress',
handleBackButtonOnnclick,
);
};
}, []);
function handleBackButtonOnnclick() {
storeData();
navigation.navigate('Home', {
screen: 'Home',
params: {
assessment_age: assessment_age,
},
});
return true;
}
const storeData = async () => {
try {
await AsyncStorage.setItem(
'assessment_age',
assessment_age.toString(),
).then(
console.log('assessment age stored -->', assessment_age.toString()),
);
} catch (e) {
console.log('assessment age store error--->', e);
}
};
希望我已经澄清了我的问题,那就是在屏幕A中营养评估年龄的每一个变化,我想重新播放屏幕
请让我知道我怎样才能做到这一点。有点太久了。任何线索都很好
根据建议,如果我能使用我的效果
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
console.log('nutri ass age', nutrition_assessment_age);
getNutritionAssessmentage();
if (isValidObject(User) && isValidObject(mSChildId)) {
if (loadApi == true) {
getHomeTabMainAPI();
setLoadApi(false);
setSelectedChild(getChildFromUserChildrenList());
}
} else {
if (!isValidObject(User) || !isValidObject(mSChildId)) {
getUserData();
}
}
});
return unsubscribe;
}, [User, mSChildId, loadApi, nutrition_assessment_age,navigation]);
它显示为空白,未提取任何数据我将使用
反应导航
生命周期方法,检查它们
我在使用react导航时遇到了与您相同的问题,因为react生命周期不会在导航更改时触发,因此我会采用以下方法:
例子:
尝试将此应用于屏幕A:
import { useFocusEffect } from '@react-navigation/native';
function ScreenA() {
useFocusEffect(
React.useCallback(() => {
// Screen A is focused, initialize the state, or do whatever checking you need.
return () => {
// Screen A is unfocused, clear the state, clear async storage, or whatever you need
};
}, [])
);
return <div>Screen A!</div>;
}
从'@react navigation/native'导入{useFocusEffect};
函数ScreenA(){
聚焦效应(
React.useCallback(()=>{
//屏幕A已聚焦,初始化状态,或执行任何需要的检查。
return()=>{
//屏幕A未聚焦,请清除状态、清除异步存储或任何您需要的内容
};
}, [])
);
返回屏幕A!;
}
您还可以将其应用于react的挂钩,如下所示:
function ScreenA({ navigation }) {
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
// Screen was focused
// Do something
});
return unsubscribe;
}, [navigation]);
return <div>Screen A!</div>;
}
函数ScreenA({navigation}){
React.useffect(()=>{
const unsubscribe=navigation.addListener('focus',()=>{
//屏幕被聚焦
//做点什么
});
退订;
},[导航];
返回屏幕A!;
}
您是否使用react导航进行路由选择?是@Antonioredeljaci已根据您的建议编辑了我的答案,但现在我的数据未被提取,因为getHomeTabMainAPI()中的数据根本未被调用,有何建议?
function ScreenA({ navigation }) {
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
// Screen was focused
// Do something
});
return unsubscribe;
}, [navigation]);
return <div>Screen A!</div>;
}