2016-08-13 13 views
5

starałem się jakoś połączyć tych przykładów:Jak połączyć reagować-rodzimej-Router-flux z reagują-native szuflady

reagować-native szufladę z reagują-Native-Router-flux: następujący tej dokumentacji : https://github.com/aksonov/react-native-router-flux/blob/master/docs/OTHER_INFO.md

Jak ustawić szufladę w pliku?

zawsze pojawiają się błędy, gdy próbuje go mieć tak:

Plik: components/Drawer.js

import Drawer from 'react-native-drawer'; 
import ControlPanel from './ControlPanel'; 
import {Actions, DefaultRenderer} from 'react-native-router-flux'; 

export default class extends Component { 
    render(){ 
     const state = this.props.navigationState; 
     const children = state.children; 
     return (
      <Drawer 
       ref="navigation" 
       open={state.open} 
       onOpen={()=>Actions.refresh({key:state.key, open: true})} 
       onClose={()=>Actions.refresh({key:state.key, open: false})} 
       type="displace" 
       content={<SideMenu />} 
       tapToClose={true} 
       openDrawerOffset={0.2} 
       panCloseMask={0.2} 
       negotiatePan={true} 
       tweenHandler={(ratio) => ({ 
       main: { opacity:Math.max(0.54,1-ratio) } 
       })}> 
       <DefaultRenderer navigationState={children[0]} onNavigate={this.props.onNavigate} /> 
      </Drawer> 
     ); 
    } 
} 

Plik: App.js

import Drawer from './components/Drawer' 

otrzymuję ten błąd. enter image description here

Odpowiedz

7

Spróbuj tego podejścia poprzez wyraźne zdefiniowanie i eksportowania nazwa klasy MyDrawer:

import React, { Component } from 'react'; 
import Drawer from 'react-native-drawer'; 
import ControlPanel from './ControlPanel'; 
import {Actions, DefaultRenderer} from 'react-native-router-flux'; 

class MyDrawer extends Component { 
    render(){ 
     const state = this.props.navigationState; 
     const children = state.children; 
     return (
      <Drawer 
       ref="navigation" 
       open={state.open} 
       onOpen={()=>Actions.refresh({key:state.key, open: true})} 
       onClose={()=>Actions.refresh({key:state.key, open: false})} 
       type="displace" 
       content={<SideMenu />} 
       tapToClose={true} 
       openDrawerOffset={0.2} 
       panCloseMask={0.2} 
       negotiatePan={true} 
       tweenHandler={(ratio) => ({ 
       main: { opacity:Math.max(0.54,1-ratio) } 
       })}> 
       <DefaultRenderer navigationState={children[0]} onNavigate={this.props.onNavigate} /> 
      </Drawer> 
     ); 
    } 
} 


export default MyDrawer; 

zmienić nazwę pliku do MyDrawer.js a następnie zaimportować przy użyciu poniżej trasach:

import MyDrawer from './components/MyDrawer' 
import TestView from './components/TestView' 



    render() { 
     return (
     <Router> 
      <Scene key="drawer" component={MyDrawer}> 
        <Scene key="main" tabs={false} > 
        <Scene key="fireBaseTest" component={TestView} drawerImage={navToggle} /> 
        //add more scenes here 
        </Scene> 
      </Scene> 
     </Router>); 

    } 
} 
+0

Po wykonaniu tego, gdzie należy umieścić trasy? – berkayk

+0

dodano przykład tras –

+0

zadziałało, ale jak zamknąć szufladę po kliknięciu dowolnego menu. Próbowałem przekazać '() => Actions.refresh ({key: state.key, open: false})' na '' i wywołanie go, strona nawiguje, ale nie zamyka szuflady. –

9

nie próbowałem umieszczenie szuflady w osobnym pliku, ale to właśnie zrobiłem:

<Drawer 
    type="static" 
    content={<Menu closeDrawer={() => this.drawer.close() }/>} 
    openDrawerOffset={100} 
    tweenHandler={Drawer.tweenPresets.parallax} 
    tapToClose={true} 
    ref={ (ref) => this.drawer = ref} 
> 
    <Router> 
      <Scene key="root"> 
       <Scene key="home" initial={true}/> 
      </Scene> 
    </Router> 
</Drawer> 

Nie korzystałem z wielu konfiguracji, więc nie przeszkadzało mi umieszczanie go bezpośrednio w miejscu, gdzie mam Router.

+0

Twoje podejście jest dobre, ale jak możesz otworzyć szufladę z domu. – Arif

Powiązane problemy