我对原生的反应是全新的。
我有以下组件:
播放列表:
export default class Playlists extends Component {
playlists = [
...
];
render() {
const {navigation} = this.props.navigation;
return (
<FlatList
data={this.playlists}
renderItem={({item}) => (
<TouchableOpacity
style={styles.item}
onPress={() => navigation.navigate('PlaylistDetails', item)}>
<Text style={styles.text}>{item.name}</Text>
</TouchableOpacity>
)}
/>
);
}
}播放列表的详细视图:
export default class PlaylistDetails extends Component {
render() {
const {navigation} = this.props.navigation;
var songs: Song[] = navigation.getParam('songs');
return (
<View>
<Text>{navigation.getParam('name')}</Text>
<FlatList
data={songs}
renderItem={({item: song}) => <Text>{song.title}</Text>}
/>
</View>
);
}
}对于导航:
const screens = {
Playlists: {
screen: Playlists,
},
PlaylistDetails: {
screen: PlaylistDetails,
},
};
const stack = createStackNavigator(screens);
export default createAppContainer(stack);但是在const { navigation } = this.props.navigation;,我得到了一个错误的Property 'navigation' does not exist on type ...。
我已经尝试添加了以下代码:
interface Props {
navigation: any
}然后添加这个:
export default class PlaylistDetails extends Component<Props> {
...
}这删除了错误,但是当我运行应用程序时,我得到了以下错误:TypeError: undefined is not an object (evaluating 'navigation.navigate')。
我对原生反应完全陌生,不知道如何解决这个问题。我希望有人能帮助我。
发布于 2020-01-23 01:55:16
一切都很好,您正在定义正确的接口。
但是,您应该传播道具,而不是深入1级并传播道具对象中的navigation属性。
它应该是这样的:
export default class PlaylistDetails extends Component<Props> {
render() {
// edit this:
const { navigation } = this.props;
var songs: Song[] = navigation.getParam('songs');
return (
<View>
<Text>{navigation.getParam('name')}</Text>
<FlatList
data={songs}
renderItem={({item: song}) => <Text>{song.title}</Text>}
/>
</View>
);
}
}https://stackoverflow.com/questions/59865064
复制相似问题