如何从导航器外部调用导航器?

时间:2017-01-05 14:46:24

标签: react-native

我的应用程序中有一个标签栏,我不希望每次呈现新路径时导航过渡都会影响。因此,我想将标签栏放在导航器之外,但在这种情况下如何触发导航操作?我无法访问从导航器外部传递给renderScene函数的导航器对象。

以下是app.js中返回的内容:

            <View>
                <Navigator
                    ref="navigator"
                    initialRoute={{name: "start"}}
                    renderScene={this.renderScene.bind(this)}
                    configureScene={this.configureScene.bind(this)}
                />
                <TabBar navigator={???} style={styles.nav} />
            </View>

3 个答案:

答案 0 :(得分:3)

好的,我想我解决了这个问题。问题似乎是在组件的第一次渲染时refs不可用。我通过以下方式解决了这个问题:

<Navigator
    ref={(r) => { this.navigatorRef = r; }}
    initialRoute={{name: "start"}}
    renderScene={this.renderScene.bind(this)}
    configureScene={this.configureScene.bind(this)}
/>
{this.state ? <TabBar navigator={this.state.navigatorRef} style={styles.nav} /> : null }

并添加了这个:

componentDidMount() {
    this.setState({navigatorRef: this.navigatorRef});
}

只是使用TabBar使组件再次渲染。

答案 1 :(得分:1)

我认为这不是做你想做的最好的方法。但要回答你的问题:

            <View>
                <Navigator
                    ref="navigator"
                    initialRoute={{name: "start"}}
                    renderScene={this.renderScene.bind(this)}
                    configureScene={this.configureScene.bind(this)}
                />
                <TabBar getNavigator={()=>this.refs.navigator} style={styles.nav} />
            </View>

然后你可以从你的TabBar中调用getNavigator()

答案 2 :(得分:1)

这是另一个适合我的版本。它是hackish,将来可能会破坏,但如果你赶时间可能会有所帮助;)

for