react-native - 如何调用Navigator已挂载的组件的方法?

标签 react-native

我想在调用 onDidFocus() 函数后从导航器实例化的组件(场景)中调用一个方法。

这是我实例化导航器的方式:

<Navigator
    initialRoute={{ name: 'Login' }}
    renderScene={ this.renderScene }
    configureScene={(route, routeStack) => Navigator.SceneConfigs.FloatFromRight}
    onDidFocus={(route) => route.component.onFocus()}
    />

这是我的 renderScene() 方法:

renderScene(route, navigator) {

    if(route.name == 'Login') {
        route.component = <Login navigator={navigator} {...route.passProps}  />
    }

    return route.component
}

但是route.component.onFocus()未定义,因为(我推测)route.component不是对实例的引用已安装 Login,但引用了 Login 类型。

那么如何获取已安装组件实例的引用?

调用onDidFocus()方法时如何调用已挂载组件的方法?

最佳答案

直接调用组件方法是一种不好的做法。如果您只是想捕捉组件激活的时刻,您可以重写 componentDidMount() 方法。

或者在更复杂的情况下,您可以在父组件中调用 setState() 并将新 Prop 传递给 Login。像这样的事情:

<Navigator
    initialRoute={{ name: 'Login' }}
    renderScene={ this.renderScene }
    configureScene={(route, routeStack) => Navigator.SceneConfigs.FloatFromRight}
    onDidFocus={(route) => this.setState({currentRoute: route})} />

renderScene(route, navigator) {
     return <Login
         currentRoute={this.state.currentRoute}
         navigator={navigator}
         {...route.passProps} />
}

然后通过重写 componentWillReceiveProps()Login 组件中捕获新的 props。

关于react-native - 如何调用Navigator已挂载的组件的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286735/

相关文章:

javascript - React-Native-Maps:如何动画协调?

javascript - 如何在不重新加载整个应用程序的情况下获取异步数据

ios - 使用 React Native、Redux 和 Navigator 进行导航的正确方法

react-native - undefined 不是一个对象(评估 'route.key' )React Navigation

javascript - React - 更改单个跨度类的背景不起作用

react-native - TabNavigator中的“阻止/禁用”选项卡- react 导航

javascript - 为什么我的 react-native 组件会重叠

react-native - 在 React Native 中减少长按 TouchableHighlight 的持续时间

javascript - react native : How to pass props navigating from one screen to another

react-native - 如何处理 ListView 排序性能?