当组件处于后台

时间:2017-11-13 09:26:53

标签: react-native

当组件处于后台时,react-native组件的作用是什么?

当组件重新激活到前台时,本机会做什么反应?

与页面A类似,导航到页面B. 并且Page B回到第A页.A和B发生了什么?

在Android上还有像onResume这样的ui更新吗?

编辑:

我有一个带有四个标签的TabNavagation。其中一个标签呈现一个Android UI组件,它是一个自定义的frameLayout(列表视图位于frameLayout中)。

当frameLayout首次渲染时,listview位置不正确(位置是-4项高度)。但是当我导航到子页面和goback时,我发现frameLayout现在是正确的并且没有输入任何android生命周期。

所以我想知道它是在做背景吗?

2 个答案:

答案 0 :(得分:0)

如果没有关于您使用的导航类型的详细信息,很难说清楚,但考虑到您使用的是常用导航软件包,我可以解释一下。

如果您的导航是某种堆栈导航,当您导航/推送新屏幕以查看前一个屏幕位于堆栈下方并且无法卸载时。这就像把一副纸牌堆成一堆。除非特定组件的道具或状态发生变化,否则它不会重新渲染。导航回新屏幕时,卸载并显示前一个屏幕。

通用包允许您将道具传递到下一个屏幕,如果您需要重新渲染以前的组件,可以通过从前一个组件发送函数并在componentWillUnmount生命周期运行它来实现此目的。当前屏幕的循环事件。我在this answer中解释了这种用法。

答案 1 :(得分:0)

经过多次调试后,我发现它是react-navigation

主页中带有底部标签栏的四个标签。当我输入带navigationOptions:{header:null}的子页面时,底部栏已消失。当我从子页面进行goback时,底栏同时返回并且整个视图已经校正。看到整个视图是重新绘制的?所以我在view.requestLayout()中调用了createViewInstance()。所以最后的结果是视图需要requestLayout手册。

更新: 回答顶部并不完全正确。最后一个问题是自定义视图应该在其requestLayout中测量self。 我在https://github.com/facebook/react-native/issues/4990

中找到了答案
@Override
public void requestLayout() {
    super.requestLayout();
    post(measureAndLayout);
}

private final Runnable measureAndLayout = new Runnable() {
    @Override
    public void run() {
        measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
        layout(getLeft(), getTop(), getRight(), getBottom());
    }
};

感谢您的回答。@ bennygenel @Jouke