Ich arbeite seit zwei Tagen an diesem Problem und nichts im Web scheint genau das zu sein, wonach ich suche.Native Antwort: Warum wird "Navigation" nicht an meine Komponente weitergegeben?
Ich versuche, einen StackNavigator in meine React Native App zu implementieren, aber aus irgendeinem Grund wird "Navigation" nicht als Prop zu den beteiligten Komponenten weitergegeben. Daher, wenn ich this.props.navigation.navigator
durch Drücken von Button aufrufen, erhalte ich den Fehler undefined is not an object (evaluating this.props.navigation.navigate)
.
Ich habe die Requisiten mehrmals geloggt und das Requisiten-Objekt ist leer, also ist das Problem kein Dekonstruktionsproblem-Objekt-Problem wie andere, die diesen Fehler bekommen haben, sondern die Tatsache, dass die Navigations-Prop ist nicht an erster Stelle.
Ich habe versucht, den Navigator-Code in eine eigene Datei und in der App.js-Datei zu platzieren, weil er dachte, dass er irgendwie aufgerufen wurde, nachdem die Komponenten gerendert wurden hat auch nicht funktioniert. Ich habe auch untersucht, ob es Teil der Requisiten im Ereignis componentDidMount ist. Immer noch nicht.
import React, { Component } from 'react'
import { Text, View, Button, StyleSheet, FlatList } from 'react-native'
import { StackNavigator } from 'react-navigation'
import { getDecks } from '../utils/api'
import NewDeckView from './NewDeckView'
import DeckListItem from './DeckListItem'
export default class DeckListView extends Component {
constructor(props){
super(props)
this.state = {
decks: []
}
}
componentDidMount(){
console.log('props now test',this.props)
getDecks()
.then(result => {
const parsedResult = JSON.parse(result);
const deckNames = Object.keys(parsedResult);
const deckObjects = [];
deckNames.forEach(deckName => {
parsedResult[deckName].key = parsedResult[deckName].title
deckObjects.push(parsedResult[deckName])
})
this.setState({
decks:deckObjects
})
})
}
render(){
return (
<View style={styles.container}>
<Text style={styles.header}>Decks</Text>
<FlatList data={this.state.decks} renderItem={({item})=><DeckListItem title={item.title} noOfCards={item.questions?item.questions.length:0}/>} />
<Button styles={styles.button} title="New Deck" onPress={()=>{this.props.navigation.navigate('NewDeckView')}}/>
</View>
)
}
}
const styles = StyleSheet.create({
header:{
fontSize:30,
margin:20,
},
container:{
flex:1,
justifyContent:'flex-start',
alignItems:'center'
},
button:{
width:50
}
})
const Stack = StackNavigator({
DeckListView : {
screen: DeckListView,
},
NewDeckView: {
screen:NewDeckView,
}
})
Sie montieren den Navigator richtig? Sie können nicht die Listenansicht Klasse mount, Sie haben den Stack Navigator für die Navigation Prop zu mounten – Vicky
Sorry, was meinst du mit "mount"? Mein Aufruf an StackNavigator ist übrigens unten. –
bedeutet, dass Sie Stack als root rendern sollten, so dass es den ersten Bildschirm anzeigt – Vicky