简体   繁体   English

在React Native + Redux中使用Navigator

[英]Use Navigator in React Native + Redux

I'm new to React Native. 我是React Native的新手。 I have a React Native app using the Redux framework. 我有一个使用Redux框架的React Native应用程序。 I'm using the Navigator component to handle navigation but this.props.navigator is undefined in component. 我正在使用导航器组件处理导航,但是this.props.navigator在组件中未定义。 How can I pass "this.props.navigator" to component? 如何将“ this.props.navigator”传递给组件? I'm not able to find any good examples of how to do it correctly so I'm looking for some help and clarification. 我找不到如何正确执行操作的良好示例,因此我正在寻求帮助和说明。

index.anroid.js index.anroid.js

...
import App from './app/app';

AppRegistry.registerComponent('RnDemo', () => App);

app.js app.js

...    
import App from './containers/app';

const logger = createLogger();
const createStoreWithMiddleware = applyMiddleware(thunk, logger)(createStore);
const store = createStoreWithMiddleware(rootReducer);

const rootApp = () => {
  return (
    <Provider store={store}>
      <App />
    </Provider>
  )
}

export default rootApp;

containers/app.js 容器/ app.js

...
class App extends Component {

  renderScene(route, navigator) {
    let Component = route.component
    return (
      <Component navigator={navigator} route={route} />
    )
  }

  configureScene(route) {
    if (route.name && route.name === 'Home') {
      return Navigator.SceneConfigs.FadeAndroid
    } else {
      return Navigator.SceneConfigs.FloatFromBottomAndroid
    }
  }

  _selectPage(page) {
    if(page === 'detail') {
      this.props.navigator.push({
        component: Detail,
        name: 'Detail'
      }) // **this.props.navigator.push is not a function**
    }
  }
  render() {
    const { navigator } = this.props;
    console.log(navigator);  // **>>>>>> Undefined**
    return (
      <View style={styles.container}>
        <View style={styles.menu}>
          <TouchableOpacity onPress={() => this._selectPage('detail')}><View style={styles.menuItem}><Text>Detail</Text></View></TouchableOpacity>
        </View>
        <View style={styles.content}>
          <Navigator
            ref='navigator'
            style={styles.navigator}
            configureScene={this.configureScene}
            renderScene={this.renderScene}
            initialRoute={{
              component: Home,
              name: 'Main'
            }}
          />
        </View>
      </View>
    )
  }
}
renderScene(route, navigator) {
    let Component = route.component
    return (
        // <Component navigator={navigator} route={route} />
        <Component {...this.props} navigator={navigator} route={route} />
    )
}

Try it 试试吧

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM