2017-11-14 1 views
0

Ich möchte die Schubladenbreite dynamisch ändern, wenn sich die Ausrichtung des Geräts ändert. Dies ist mein CodeZugriffsstatus innerhalb einer Funktion zum dynamischen Einstellen der Schubladenbreite

updateWidth = (width) => { 
    this.setState({drawerWidth: width/2 }); 
    } 

ich updateWidth rufen, wenn componentDidMount und onLayout Funktionen aufgerufen werden.

In der drawerNavigator Erklärung, ich setze . Hier bekomme ich eine Fehlermeldung, dass drawerWidth: this.state.drawerWidth nicht definiert ist. Wie kann ich dieses Problem lösen?

Edit: Dies ist der Komponentencode Überblick

const { width } = Dimensions.get('window'); 

const AppDrawer = DrawerNavigator(
{ 
    Category: { 
    path: '/bla', 
    screen: bla, 
    }, 
}, 
{ 
    drawerWidth: this.state.drawerWidth , 
    contentComponent: test, 
    initialRouteName: 'tets', 
    contentOptions: { 
    activeTintColor: '#fd67d3', 
    }, 
} 
); 


const AppNavigator = StackNavigator({ 
... 
}) 


class RootContainer extends Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     drawerWidth: 30 
    } 
} 

    onLayout(e) { 
    const {width, height} = Dimensions.get('window') 
    this.updateWidth(width); 
    } 

    updateWidth = (width) => { 
    this.setState({drawerWidth: width/2 }); 
    } 

    componentDidMount() { 
    this.updateWidth(width); 
} 
+0

Verwenden Sie eine zustandslose Komponente? Und könnten Sie mehr Code für Ihre Komponente bereitstellen? – TimH

+0

@TimH Ich habe mehr Code hinzugefügt – user567

Antwort

0

Ihre Schublade Komponente eine stateless Komponente ist. Erstellen Sie es als eine klassenbasierte Komponente neu und Sie können dann einen Zustand darin haben. Stateless-Komponenten können nur Requisiten aufnehmen, die ihnen übergeben wurden, aber sie können keinen Zustand speichern.

+0

Ich bin neu auf reagieren und alle Tutorial, das ich zeigte, war das Erstellen der Schublade auf diese Weise. Wie kannst du mir zeigen, wie man es statusfähig macht? – user567

+0

@ user567 TimH hat die richtige Antwort gepostet. Sie müssen damit experimentieren. Seine Antwort zeigt Ihnen, wie Sie eine Klassenkomponente richtig erstellen und den Zustand initialisieren. –

0

Sie müssen Ihren Status im Konstruktor initialisieren und eine zustandsbehaftete Komponente verwenden.

class AppDrawer extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      drawerWidth: 0 //or any other number 
     } 
    } 
+0

Nein, ich habe das bereits versucht und das funktioniert nicht – user567

+0

Haben Sie versucht, einen Konstruktor in Ihrer RootContainer-Komponente zu erstellen? – TimH

+0

Ja, ich habe hier den Code mit dem, was ich versucht habe aktualisiert – user567

Verwandte Themen