在 React Native 中制作一个可重用的组件?

Make a reusable component in react native?

我制作了一个可重复使用的组件来呈现一个 Flatlist 并且在按下它时我在里面有一个 TouchableOpacity 我想导航到一个特定的屏幕, 我根据 FlateList

中的项目传递了一些参数

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

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,
          //   })
          // }
        />
const OrdersList = props => {
    return (
      <View >
        <FlatList
          data={props.data}
          renderItem={({item}) => {
            return (
              <TouchableOpacity
                onPress={()=>{

                props.navigate(props.screen,{item:item, item2:props.additionalProp})
                   }
                }
               >
                  <Text>
                    {item.service}
                  </Text>
              </TouchableOpacity>
            )}}
        />
      </View>
    );
  };
  export default class Prova extends Component{

render(){
    return(
        <View>
        <OrdersList
        data={[{service:'service',data:'2019-12-12'},{}]}
        navigate={this.props.navigation.navigate}
        screen={'YourScreen'}
        additionalProp={"additional prop"}
        ></OrdersList>
        </View>
    )}

  }

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

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

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