开发者问题收集

如何在 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
});

>

有关事件的更多信息,请查看此处。

https://reactnavigation.org/docs/4.x/function-after-focusing-screen/#triggering-an-action-with-a-didfocus-event-listener

Waheed Akhtar
2020-05-09

如果只是检查项目数量,您可以始终使用 items.length ,但如果您正在寻找您的状态实际上应该获取更新数据的情况,您可以使用 shouldComponentUpdate

shouldComponentUpdate(nextProps, nextState){
  return nextState.items != this.state.items;
}
Imjaad
2020-05-09