首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型' Readonly<{ }> &Readonly<{Readonly<?:ReactNode;}>‘上不存在属性’导航‘

类型' Readonly<{ }> &Readonly<{Readonly<?:ReactNode;}>‘上不存在属性’导航‘
EN

Stack Overflow用户
提问于 2020-01-23 01:19:40
回答 1查看 1.3K关注 0票数 0

我对原生的反应是全新的。

我有以下组件:

播放列表:

代码语言:javascript
复制
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>
        )}
      />
    );
  }
}

播放列表的详细视图:

代码语言:javascript
复制
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>
    );
  }
}

对于导航:

代码语言:javascript
复制
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 ...

我已经尝试添加了以下代码:

代码语言:javascript
复制
interface Props {
    navigation: any
}

然后添加这个:

代码语言:javascript
复制
export default class PlaylistDetails extends Component<Props> {
    ...
}

这删除了错误,但是当我运行应用程序时,我得到了以下错误:TypeError: undefined is not an object (evaluating 'navigation.navigate')

我对原生反应完全陌生,不知道如何解决这个问题。我希望有人能帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 01:55:16

一切都很好,您正在定义正确的接口。

但是,您应该传播道具,而不是深入1级并传播道具对象中的navigation属性。

它应该是这样的:

代码语言:javascript
复制
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>
    );
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59865064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档