【发布时间】:2017-01-25 02:52:32
【问题描述】:
RN Navigator 试图弄清楚为什么 Navigator 会渲染所有推送到其堆栈中的路由,这让我有一段时间感到困惑。
最初
<Navigator initialRoute={{name:"Route 1", index: 1}} />
然后在发出 navigator.push({ name : "Route 2", index: 2 }) 时,我的组件的 render() 方法被调用,该方法重新渲染 Navigator,而 Navigator 又调用 renderScene。
在推送第二条路线并在调用 renderScene 时记录路线后,将产生:
渲染() --> 渲染场景(), {name:"Route 1", index: 1}
渲染() --> 渲染场景(), {name:"Route 2", index: 2}
有谁知道为什么 renderScene() 被调用的次数与导航器堆栈中的路由一样多?这是预期的行为吗?如果是,我们如何加快渲染速度?
在最终渲染最后一条推送路线的场景之前尝试渲染 5 条路线的场景时,性能会受到显着影响,而实际上它应该调用一次 render() 以仅渲染最后一条推送路线的场景。
非常感谢任何帮助。 谢谢!
这些是相关的sn-ps:
nav.js
export function ListPage(){
return {
name: LIST_PAGE,
index: 1
}
}
Main App
<Navigator
ref={(ref) => this.navigator = navigator = ref}
initialRoute={nav.ListPage()}
renderScene={(route,navigator)=>this.renderListingsScene(route,navigator)}
/>
renderListingsScene(route, navigator){
console.log("renderScene()", route);
}
【问题讨论】:
-
您能分享一下您的
renderScene的实际样子吗?另外你的<Navigator initialRoute={name:"Route 1", index: 1} />缺少一对花括号,应该是<Navigator initialRoute={{name:"Route 1", index: 1}} /> -
我已经更新了问题以反映您正在寻找的代码,并且我的代码中有括号 - 修正了错字
-
是的,这很奇怪。我有同样的问题,但在
initialRoute中只有 2 条路由(渲染 2x)并使用navigationState传递堆栈(但不推任何) -
我遇到了同样的问题,而且它根本不受 initialRoute 的影响。你找到解决办法了吗?
标签: react-native render navigator