屏幕出现时调用哪个生命周期事件?

时间:2017-12-04 06:29:07

标签: javascript react-native lifecycle react-navigation

假设我有两个屏幕:

  • 屏幕A
  • 屏幕B

我最初登陆屏幕A 。当我点击Button时,我导航到屏幕B 。当我按Back Button时,我再次导航到屏幕A

当我导航到屏幕A 时,我想调用一个动作创建者,如上面的场景所述。

我只想知道每次出现屏幕时都会调用哪个生命周期事件。

是否有某些事件,例如componentWillAppear()

注意:我正在使用react-nativereact-navigation进行导航。

3 个答案:

答案 0 :(得分:7)

现在可以通过听众进行简单的反应导航来实现:

在组件A中:

componentDidMount = () => {
  this._componentFocused();

  this._sub = this.props.navigation.addListener(
    'didFocus',
    this._componentFocused
  );
}

componentWillUnmount() {
  this._sub.remove();
}

_componentFocused = () => {
  this.setState({dataToShow});
}

React Navigation docs - Lifecycle

答案 1 :(得分:1)

如果您使用react-native-navigation,则可以侦听外观事件:https://wix.github.io/react-native-navigation/#/screen-api?id=listen-to-visibility-events-globally

答案 2 :(得分:0)

当您从一个屏幕导航到另一个屏幕时,第一个屏幕将不会被卸载,但仍然在堆栈中,只需隐藏在后台。

您需要的内容可能是class Foo def initialize(a) @a = a end def apply?(examples) foo_1 { examples } end private def foo_1 v = foo_2 { yield.size } v ? 1 : 2 end def foo_2 yield > @a end end ,但目前设计中尚未提供,请参阅react-native open issue #51

您可以尝试这种替代方式:react-navigation-addons。有了这个,你可以举办活动componentDidFocus& focus可能符合您的需求。