在 React Native 中制作可重用的组件? [英] Make a reusable component in react native?

查看:28
本文介绍了在 React Native 中制作可重用的组件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我制作了一个可重用的组件来呈现一个平面列表,当按下它时我有一个 TouchableOpacity 我想导航到一个特定的屏幕,我根据 FlateList 中的项目传递了一些参数

I make a reusable component to render a Flatlist and inside I have a TouchableOpacity when pressed it I want to navigate to a specific screen, and I pass some params based on items inside FlateList

所以当我按下导航时出现错误

So when I pressed to navigate i got an error

无法读取未定义的属性导航

can't read property navigate of undefined

这是我的代码

const OrdersList = props => {
  return (
    <View style={styles.container}>
      <FlatList
        data={props.data}
        renderItem={({item}) => {
          return (
            <TouchableOpacity
              onPress={() =>
                props.navigation.navigate(props.screenName, {
                  ...
                  service: item.service,
                  date: item.date,
                  ...
                })
              }
             >
                <Text>
                  {item.service}
                </Text>
            </TouchableOpacity>
          );
        }}
      />
    </View>
  );
};

这是我如何使用它

 <OrdersList
          data={this.state.orders}
          extraData={this.state}
          screenName="OrderHomeDetails"
          // navigate={ // when i do it i got error he can't find item and thats usual 
          //   (this.props.navigation.navigate,
          //   {
          //     service: item.service,
          //     time: item.time,
          //     username: item.username,
          //     buildingNumber: item.buildingNumber,
          //     date: item.date,
          //     description: item.description,
          //     images: item.images,
          //     status: item.status,
          //     snapshotKey: item.snapshotKey,
          //   })
          // }
        />

推荐答案

你的错误是告诉我渲染 OrdersList 的任何组件都没有接收导航道具.如果此组件是一个屏幕,则应导航到它以接收导航道具(这意味着它列在您使用的任何 create*navigator 中).

You error is telling me that whatever component is rendering OrdersList is not receiving navigation props. If this component is a screen, it should be navigated to in order to receive the navigation prop (which means it is listed on whatever create*navigator you used).

由于我无法完全访问您的代码,我建议您在 OrdersList 上使用 withNavigation 装饰器,这样您就不必再从父级传递导航道具了.

As I have not full access to your code, I can suggest you to use withNavigation decorator on OrdersList, so you no longer have to pass navigation props from the parent.

const OrdersList_ = props => {
  return (
    <View style={styles.container}>
      <FlatList
        data={props.data}
        renderItem={({item}) => {
          return (
            <TouchableOpacity
              onPress={() =>
                props.navigation.navigate(props.screenName, {
                  ...
                  service: item.service,
                  date: item.date,
                  ...
                })
              }
             >
                <Text>
                  {item.service}
                </Text>
            </TouchableOpacity>
          );
        }}
      />
    </View>
  );
};

const OrdersList = withNavigation(OrdersList)

 <OrdersList
          data={this.state.orders}
          extraData={this.state}
          screenName="OrderHomeDetails"
          // navigate={ // when i do it i got error he can't find item and thats usual 
          //   (//no need to pass navigation props anymore
          //   {
          //     service: item.service,
          //     time: item.time,
          //     username: item.username,
          //     buildingNumber: item.buildingNumber,
          //     date: item.date,
          //     description: item.description,
          //     images: item.images,
          //     status: item.status,
          //     snapshotKey: item.snapshotKey,
          //   })
          // }
        />

参考:https://reactnavigation.org/docs/en/with-navigation.html

这篇关于在 React Native 中制作可重用的组件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆