如何在 React Native 中每次打开页面时刷新数据?
2020-05-09
1988
当前代码
App.js
const Mypage = {
screen: MypageScreen,
navigationOptions: () => ({
headerShown: false,
}),
};
const MypageStack = createStackNavigator(
{ Mypage },
{
initialRouteName: 'Mypage',
navigationOptions: {
title: 'Mypage',
},
},
);
const postLoginNavigator = createBottomTabNavigator({
Mypage: MypageStack,
});
const AppNavigator = createStackNavigator({
Loading,
...,
PostLogin: postLoginNavigator,
}, {
mode: 'modal',
headerMode: 'none',
initialRouteName: 'Loading',
});
const AppContainer = createAppContainer(AppNavigator);
export default class App extends React.Component {
render() {
return (
<AppContainer />
);
}
}
Mypage.js
export default class Mypage extends Component {
constructor(props) {
super(props);
this.state = {
items: '',
};
}
async componentDidMount() {
// getting how many items this user have
const items = await db.getAllItems()
// items is an array
this.setState({
items: items.length,
});
}
render() {
return (
<View>
<Text>Items</Text>
</View>
<View>
<Text>
{ this.state.items }
</Text>
</View>
);
}
}
我想做什么
我希望每次打开 mypage 选项卡时都刷新数据。
mypage.js 中的项目数量正在发生变化,因此我希望更新项目数量。
或者当只有项目数量发生变化时,我希望更新数量。
如果您能给我任何建议,我将不胜感激。
2个回答
查看您的代码时,您可能正在使用 react-navigation v4 ,因此您必须为选项卡上的每个焦点添加事件监听器,它将被调用并获取新数据。
componentDidMount() {
const { navigation } = this.props;
this.focusListener = navigation.addListener('didFocus', () => {
// The screen is focused
// Call any action
});
>
有关事件的更多信息,请查看此处。
Waheed Akhtar
2020-05-09
如果只是检查项目数量,您可以始终使用
items.length
,但如果您正在寻找您的状态实际上应该获取更新数据的情况,您可以使用
shouldComponentUpdate
shouldComponentUpdate(nextProps, nextState){
return nextState.items != this.state.items;
}
Imjaad
2020-05-09