开发者问题收集

如何在每次访问页面/屏幕时触发 componentDidMount() 或 useEffect Hook?

2017-11-18
110012

所以我有一个带有活动的应用程序。该应用程序在开始时检查互联网连接。如果没有互联网连接,它将显示一个带有刷新页面按钮的屏幕。问题是我的 API 调用(Axios)位于 componentDidMount() 上,它在第一次渲染后只被调用一次。有什么方法可以重新加载页面以便它再次调用 componentDidMount

我的意思是完全刷新。顺便说一句,我正在使用 EXPO。任何帮助都值得赞赏。抱歉,没有例子,我只是想尽可能了解一下这个想法

3个回答

您可以强制更新组件。 检查这个: https://reactjs.org/docs/react-component.html#forceupdate

它将重新渲染组件。

检查这个例子:

class App extends Component{
  constructor(){
    super();
        this.forceUpdateHandler = this.forceUpdateHandler.bind(this);
  };

  forceUpdateHandler(){
    this.forceUpdate();
  };

  render(){
    return(
      <div>
          <button onClick= {this.forceUpdateHandler} >FORCE UPDATE</button>
            <h4>Random Number : { Math.random() }</h4>
          </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('app'));
Sunil tc
2017-12-03

我建议将您的 API 调用放在组件内自己的函数 fetchData 中。 fetchData 也可以在成功获取后 setState ,这将导致重新渲染并显示新数据。如果您想在 componentDidMount 和按钮单击时获取新数据,请创建一个 fetchData 函数并从 componentDidMount 中调用该函数,然后为您的按钮适当设置您的 onPress prop onPress={this.fetchData

Nunchucks
2018-01-22

尝试使用此示例并检查一下 也检查一下

 componentDidMount() {
            this.props.navigation.addListener("focus", () => {
                // do something here
            });
        }
Shivo'ham
2019-10-15