代码之家  ›  专栏  ›  技术社区  ›  JsWizard

在反应导航中通过onPress()传递对象参数

  •  0
  • JsWizard  · 技术社区  · 4 年前

    我试图通过PlanScreen中的onPress()向PlanDetailScreen传递一个对象参数,但错误为“TypeError”;undefined不是对象(计算“detail.weekNumber”)。 如何解决?

    function PlanDetailScreen({ detail }) {
      return (
        <SafeAreaView>
          <Text key={detail.weekNumber}>{"Week " + detail.weekNumber}</Text>
        </SafeAreaView>
      );
    }
    
    function PlanScreen({ navigation }) {
      return (
        <FlatList
          numColumns={5}
          data={PlanData}
          renderItem={({ detail }) => (
            <TouchableOpacity
              onPress={(detail) =>
                navigation.navigate("PlanDetailScreen", { detail })
              }
            >
              <Text key={detail.weekNumber}>{"Uke\n" + detail.weekNumber}</Text>
            </TouchableOpacity>
          )}
        />
      );
    }
    
    1 回复  |  直到 4 年前
        1
  •  0
  •   Kevin Gelpes    4 年前

    什么 Muhammad said 是的,但你也必须考虑到导航参数是在 route 屏幕的道具。

    它看起来像这样:

    function PlanDetailScreen({ route }) {
      return (
        <SafeAreaView>
          <Text key={detail.weekNumber}>{"Week " + route.params.detail.weekNumber}</Text>
        </SafeAreaView>
      );
    }
    
    function PlanScreen({ navigation }) {
      return (
        <FlatList
          numColumns={5}
          data={PlanData}
          renderItem={({ detail }) => (
            <TouchableOpacity
              onPress={() =>
                navigation.navigate("PlanDetailScreen", { detail })
              }
            >
              <Text key={detail.weekNumber}>{"Uke\n" + detail.weekNumber}</Text>
            </TouchableOpacity>
          )}
        />
      );
    }
    

    看看: https://reactnavigation.org/docs/params/

        2
  •  0
  •   MUHAMMAD ILYAS    4 年前

    你正在压倒一切 detail 这就是为什么细节未定义的原因,只需将其从中删除即可 onPress

    function PlanDetailScreen({ detail }) {
      return (
        <SafeAreaView>
          <Text key={detail.weekNumber}>{"Week " + detail.weekNumber}</Text>
        </SafeAreaView>
      );
    }
    
    function PlanScreen({ navigation }) {
      return (
        <FlatList
          numColumns={5}
          data={PlanData}
          renderItem={({ detail }) => (
            <TouchableOpacity
              onPress={() =>
                navigation.navigate("PlanDetailScreen", { detail })
              }
            >
              <Text key={detail.weekNumber}>{"Uke\n" + detail.weekNumber}</Text>
            </TouchableOpacity>
          )}
        />
      );
    }