为什么不使用React Native Router Flux + Redux触发React Native Drawer?

Jo *_* Ko 6 react-jsx react-native redux

我使用以下组件来创建React Native + Redux应用程序:

我试着完全按照提供的关于如何实现抽屉示例,但是当导航到应该显示抽屉的地方时,使用Actions.drawer,我得到错误:

在此输入图像描述

但是,如果我尝试导航到场景,通过Actions.home,在抽屉场景内,没有任何反应,但动作REACT_NATIVE_ROUTER_FLUX_RESET仍在通过调用redux-logger.

完全按照例子尝试但没有运气.我能做错什么?

这是我使用Redux设置的场景:

// @flow
import React, { Component } from 'react'
import {
  ActionConst,
  Actions,
  Router,
  Scene,
} from 'react-native-router-flux'
import {
  Provider,
  connect,
} from 'react-redux'

import configureStore from './store/configureStore'
import Login from './components/Login'
import Home from './components/Home'
import NavDrawer from './components/NavDrawer'

const RouterWithRedux = connect()(Router)
const store = configureStore()

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <RouterWithRedux>
          <Scene key='root'>
            <Scene component={Login} initial={true} key='login' title='Login'/>
            <Scene key="drawer" component={NavDrawer}>
              <Scene component={Home} key='home' title='Home' type='reset' initial={true}/>
            </Scene>
          </Scene>
        </RouterWithRedux>
      </Provider>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我在Login中按下一个按钮,它会触发Actions.导航到.

NavDrawer是:

import React, { PropTypes } from 'react'
import Drawer from 'react-native-drawer'
import { Actions, DefaultRenderer } from 'react-native-router-flux'

import NavDrawerPanel from './NavDrawerPanel'

export default class NavDrawer extends Component {

  componentDidMount() {
      Actions.refresh({key: 'drawer', ref: this.refs.navigation});
  }

  render() {
    const children = state.children;

    return (
      <Drawer
        ref="navigation"
        type="displace"
        content={<NavDrawerPanel />}
        tapToClose
        openDrawerOffset={0.2}
        panCloseMask={0.2}
        negotiatePan
        tweenHandler={(ratio) => ({
          main: { opacity: Math.max(0.54, 1 - ratio) },
        })}
      >
        <DefaultRenderer
          navigationState={children[0]}
          onNavigate={this.props.onNavigate}
        />
      </Drawer>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

NavDrawerPanel是:

import React from 'react';
import {PropTypes} from "react";
import {
  StyleSheet,
  Text,
  View,
} from "react-native";
import { Actions } from 'react-native-router-flux';

const NavDrawerPanel = (props, context) => {
  const drawer = context.drawer;
  return (
    <View style={styles.container}>
      <TouchableHighlight onPress={Actions.home}>
        <Text>Home Page</Text>
      </TouchableHighlight>
      <TouchableHighlight onPress={Actions.login}>
        <Text>Login Page</Text>
      </TouchableHighlight>
    </View>
  )
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 30,
    backgroundColor: 'black'
  },
})
Run Code Online (Sandbox Code Playgroud)

编辑 以下是在场景+ Redux设置中导入的内容:

// @flow
import React, { Component } from 'react'
import {
  ActionConst,
  Actions,
  Router,
  Scene,
} from 'react-native-router-flux'
import {
  Provider,
  connect,
} from 'react-redux'

import configureStore from './store/configureStore'
import Login from './components/Login'
import Home from './components/Home'
import NavDrawer from './components/NavDrawer'
Run Code Online (Sandbox Code Playgroud)

编辑2 - console.log(this.props)

在组件Login中执行console.log(this.props): 在此输入图像描述

当组件Login中的Actions.home()时: 在此输入图像描述

当组件Login中的Actions.drawer()时: 在此输入图像描述

编辑3 - 在NavDrawer.js中的console.log(this.props)

NavDrawer永远不会被渲染,因此console.log(this.props)不会被记录

但是在NavDrawer.js和Actions.home中使用console.log(this.props),我得到:

在此输入图像描述

在NavDrawer.js和Actions.drawer中使用console.log(this.props),我得到:

在此输入图像描述

Sta*_*oul 0

不确定这是否是问题所在,但您似乎没有在 NavDrawerPanel 组件上导入 TouchableHighlight,因此:

import {
  StyleSheet,
  Text,
  View,
  TouchableHighlight
} from "react-native";
Run Code Online (Sandbox Code Playgroud)