javascript - 属性 'navigation' 在类型“Readonly<{}>”和“Readonly<{children?”上不存在? : ReactNode; }>

标签 javascript typescript react-native

我对原生 react 完全陌生。

我有以下组件:

播放列表:

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>
        )}
      />
    );
  }
}

播放列表的详细信息 View :

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; 处,我收到错误类型上不存在属性“navigation”...

我尝试添加以下代码:

interface Props {
    navigation: any
}

然后添加:

export default class PlaylistDetails extends Component<Props> {
    ...
}

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

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

最佳答案

一切都很好,并且您正在定义正确的接口(interface)。

但是,您应该传播 props,而不是深入 1 层并在 props 对象中传播 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>
    );
  }
}

关于javascript - 属性 'navigation' 在类型“Readonly<{}>”和“Readonly<{children?”上不存在? : ReactNode; }>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865064/

相关文章:

javascript - 如何从 ImmutableJS Record 构造函数调用函数

typescript - SignalR 客户端在更新到核心 3.1 后不工作

react-native - ListEmptyComponent 在 React Native 部分列表中没有使用 flex 1 全屏显示

javascript - 如何计算点后面两位小数的小时差

javascript - 如何通过 JavaScript 知道用户何时开始或停止视频?

javascript - 使用 Typescript 检索 Mocha 测试中当前测试的名称

javascript - 在 React Native 中使用 Airbnb 的 "react-with-styles"

javascript - 未处理的 JS 异常 : Requiring unknown module "9"

javascript - 每天包含多个值的条形图(Google Visualization API)

javascript - 通知: Undefined index: dateform