是否可以在本机反应中使用可重用组件?

问题描述 投票:1回答:2

我制作了一个可重用的组件来呈现Flatlist,按下该组件时我内部有一个TouchableOpacity,我想导航到特定的屏幕,并且我根据FlateList中的项目传递了一些参数]

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

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

这是我的代码

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上)。
由于我没有完全访问您的代码的权限,因此我建议您在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

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

javascript reactjs react-native react-navigation react-native-flatlist
2个回答
0
投票
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)
© www.soinside.com 2019 - 2024. All rights reserved.