首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当屏幕从其他屏幕返回时,会调用哪个函数?

当屏幕从其他屏幕返回时,会调用哪个函数?
EN

Stack Overflow用户
提问于 2022-05-18 18:59:02
回答 2查看 429关注 0票数 0

我可以看到本机组件的生命周期。componentDidMount,UNSAFE_componentWillMount等我以为当屏幕恢复时,UNSAFE_componentWillMount被调用了。但这不是所谓的。我使用Reactive17over,ResiveNative0.68.1,并使用navigation.goBack()从第二个屏幕返回到第一个屏幕。当屏幕恢复时,哪个函数被调用?或者有什么别的方法可以做到呢?

EN

回答 2

Stack Overflow用户

发布于 2022-05-18 19:55:55

你在这里要小心点。在react-native中是一个屏幕remains mounted on navigation。这个与网络不同

如果您是从web背景来响应导航,您可能会假设当用户从路由A导航到路由B时,A将卸载(其componentWillUnmount被调用),而A将在用户返回时再次挂载。虽然这些are生命周期方法仍然有效,并且用于React导航,但它们的用法与web不同。

因此,如果您通过goBack导航,将不会再次调用componentWillMount,因为屏幕remains mounted。对于这个问题,这在这里的一节中有记录。有一个通用的解决方法。

对于functional components,我们可以使用useFocusEffect挂钩,如下所示。

代码语言:javascript
复制
useFocusEffect(
    React.useCallback(() => {
      // Do something when the screen is focused

      return () => {
        // Do something when the screen is unfocused
        // Useful for cleanup functions
      };
    }, [])
  );

对于class components,我们可以使用focus listener。我是记录在这里

代码语言:javascript
复制
class SomeClassComponent extends React.Component {
  componentDidMount() {
    this._unsubscribe = navigation.addListener('focus', () => {
      // do whatever
    });
  }

  componentWillUnmount() {
    this._unsubscribe();
  }

...

在某些情况下,仍然使用功能组件可能更方便。我们可以简单地将遗留类组件包装到功能组件中,如下所示。

代码语言:javascript
复制
const Wrapper = () => {
  // useFocusEffect from above.

  return <SomeClassComponent />
}
票数 2
EN

Stack Overflow用户

发布于 2022-05-18 19:08:45

在本机响应中,当您更改屏幕并返回到前一个屏幕时,它不会改变用户,因此使用useEffect钩子不起作用。但是,您可以使用react导航提供的useFocusEffect钩子。您可以更详细地阅读这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72294623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档