如何使用react-navigation v5获取id的参数?

时间:2020-09-16 04:56:23

标签: react-native parameters react-props react-navigation-v5

我正在尝试更新使用react-navigation v4开发的应用。

使用react-navigation v4,我可以使用console.log(navigation.getParam('id'));

但是当我在更新到react-navigation v5之后尝试相同操作时,它显示了一个错误,并且我找不到正确的方法来获取参数ID

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export default function ShowScreen({ navigation }) {
  console.log(navigation.getParam('id'));

  return (
    <View style={styles.container}>
      <Text>Show Screen</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center'
  }
});

id所在的另一个屏幕是它:

import React, { useContext } from 'react';
import { View, Text, StyleSheet, Button } from 'react-native';
import { FlatList, TouchableOpacity } from 'react-native-gesture-handler';

import { Context } from '../../context/BlogContext';

import Icon from 'react-native-vector-icons/Feather'

export default function IndexScreen({ navigation }) {
  const { state, addBlogPost, deleteBlogPost } = useContext(Context);

  return (
    <View style={styles.container}>
      <Button
        title="Add Post"
        onPress={addBlogPost}
      />
      <FlatList
        data={state}
        keyExtractor={(blogPost) => blogPost.title}
        renderItem={({ item }) => {
          return (
            <TouchableOpacity onPress={
              () => navigation.navigate('ShowScreen',
                { id: item.id })}>
              <View style={styles.row}>
                <Text style={styles.title}>
                  {item.title} -
                  {item.id}
                </Text>
                <TouchableOpacity onPress={() => deleteBlogPost(item.id)}>
                  <Icon style={styles.icon}
                    name="trash"
                  />
                </TouchableOpacity>
              </View>
            </TouchableOpacity>
          );
        }}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: 30,
    justifyContent: 'center',
    alignItems: 'center'
  },
  row: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    paddingHorizontal: 10,
    paddingVertical: 20,
    borderTopWidth: 1,
    borderColor: '#333'
  },
  title: {
    fontSize: 18
  },
  icon: {
    fontSize: 24
  }
});

2 个答案:

答案 0 :(得分:0)

您可以在React Navigation v5中使用route.params来获取参数,详情请参见here

只需将您的代码更新为此

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export default function ShowScreen({ navigation,route }) {
  const {id} =route.params; //you will get id here via route

  return (
    <View style={styles.container}>
      <Text>Show Screen</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center'
  }
});

答案 1 :(得分:0)

您可以像这样简单地访问参数

const id = this.props.route.params.id

this.props.route.params内部,您将获得所有参数:)