Как реализовать react-native-drawer в react-native-router-flux с редуксом?

Я пытаюсь реализовать react-native-drawer в react-native-router-flux с редуксом. Пробовал следующий пример: https://github.com/aksonov/react-native-router-flux/blob/master/docs/OTHER_INFO.md, но по-прежнему возникает ошибка: Element type is invalid: expected a string (for built-in components) but got: object. Check the render method of 'DefaultRenderer'.

Как правильно реализовать ящик в react-native-router-flux?

РЕДАКТИРОВАНИЕ – ОБНОВЛЕНИЕ: по-прежнему появляется сообщение об ошибке "Неверный тип элемента..."

Краткое примечание: если я делаю Actions.drawer, я получаю сообщение об ошибке, но если я делаю Actions.home, ничего не происходит, но действие REACT_NATIVE_ROUTER_FLUX_RESET все еще вызывается

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} initial={true}>
              <Scene component={Home} key='home' title='Home' type='reset'/>
            </Scene>
          </Scene>
        </RouterWithRedux>
      </Provider>
    )
  }
}

Затем я нажимаю кнопку в разделе «Вход», и она запускает 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 state = this.props.navigationState;
    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>
    );
  }
}

И 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>
        <Text>Home</Text>
      </TouchableHighlight>
      <TouchableHighlight>
        <Text>Profile</Text>
      </TouchableHighlight>
      <TouchableHighlight>
        <Text>Friends</Text>
      </TouchableHighlight>
    </View>
  )
}

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

Ошибка:

введите здесь описание изображения


person Jo Ko    schedule 23.09.2016    source источник
comment
Возможно, вы забыли экспортировать свой NavDrawPanel. Скорее всего, просто отсутствует объект, экспортированный из модуля NavDrawPanel.   -  person Nozim    schedule 14.11.2016


Ответы (2)


См. эту ссылку... просто скопируйте и вставьте компонент ящика в первый ответ... Попробуйте этот код и замените на DefaultRenderer:

 <DefaultRenderer navigationState={children[0]} onNavigate={this.props.onNavigate}/>
person Community    schedule 23.09.2016
comment
Оцените предложение и сделал, как вы посоветовали, но все равно получаете ту же ошибку. Обновил исходный пост, посмотрите. - person Jo Ko; 24.09.2016
comment
Краткое примечание: если я делаю Actions.drawer, я получаю сообщение об ошибке, но если я делаю Actions.home, ничего не происходит, но действие REACT_NATIVE_ROUTER_FLUX_RESET все еще вызывается - person Jo Ko; 24.09.2016
comment
Проверяю, видели ли вы мой последний комментарий. Пожалуйста, дай мне знать. - person Jo Ko; 24.09.2016

Я думаю, что проблема в вашем компоненте.

Обратите внимание, что вы импортируете вид ящика следующим образом:

import NavDrawerPanel from './NavDrawerPanel'

но если вы внимательно посмотрите на файл NavDrawerPanel, там нет экспорта по умолчанию. Поэтому вместо того, чтобы иметь

const NavDrawerPanel

Вы должны иметь:

export const NavDrawerPanel

Ошибка немного вводит в заблуждение, но она относится к представлению ящика, а не к самому компоненту ящика. Дайте мне знать, если это поможет :)

person Jose Greinch    schedule 20.03.2017