私は今この問題を2日間働いており、ウェブ上の何も正確に私が探しているものではないようです。React Native:「ナビゲーション」がコンポーネントに渡されないのはなぜですか?
私はReact NativeアプリにStackNavigatorを実装しようとしていますが、なんらかの理由で「ナビゲーション」が関連するコンポーネントの小道具として渡されていません。ボタンを押してthis.props.navigation.navigator
と呼ぶと、エラーundefined is not an object (evaluating this.props.navigation.navigate)
が出ます。
私はこの小道具を何度もログに記録していて、小道具のオブジェクトは空ですので、このエラーが発生した他の人たちのように、問題の解体は問題ではありませんが、最初はそこにいません。
Navigatorコードを独自のファイルに配置しようとしましたが、App.jsファイルでは、コンポーネントがレンダリングされた後に何らかの形で呼び出されたため、ナビゲーションプロップを渡す機会は得られませんでしたが、どちらもうまくいきませんでした。また、componentDidMountイベントの小道具の一部であるかどうかを調べました。まだありません。
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,
}
})
ナビゲーターを正しくマウントしていますか?リストビュークラスをマウントすることはできません。ナビゲーションの小道具が動作するようにスタックナビゲータをマウントしました – Vicky
申し訳ありませんが、「マウント」とはどういう意味ですか? StackNavigatorへの私の呼び出しは途中です。 –
は、Stackをルートとしてレンダリングして最初の画面を表示することを意味します。 – Vicky