Cara meneruskan props ke komponen yang diteruskan ke MenuItem di material-ui

Saya memiliki kode berikut untuk merender menu notifikasi

      <Menu
        anchorEl={notificationAnchorEl}
        anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
        transformOrigin={{ vertical: 'top', horizontal: 'right' }}
        open={isNotificationMenuOpen}
        onClose={this.handleNotificationMenuClose}
      >
        {notifications.map(notification => (
          <MenuItem
            key={notification.id}
            component={NotificationItem}
            onClick={this.handleNotificationMenuClose}
          />
        ))}
      </Menu>

Yang tidak saya mengerti adalah bagaimana cara meneruskan props ke Komponen NotificationItem menggunakan objek notification yang saya miliki.


person ManavM    schedule 14.02.2019    source sumber
comment
Bisakah Anda menjelaskan apa yang MenuItem lakukan, atau apa yang Anda ingin MenuItem lakukan?   -  person cglacet    schedule 14.02.2019
comment
Versi Material UI manakah yang Anda gunakan?   -  person darksmurf    schedule 14.02.2019
comment
MenuItem adalah komponen material-ui material-ui.com/api/menu-item   -  person ManavM    schedule 14.02.2019
comment
@darksmurf 3.6.2   -  person ManavM    schedule 14.02.2019


Jawaban (2)


Cukup render NotificationItem di dalam MenuItem jika itu yang Anda inginkan.

Selain itu, ingatlah untuk meneruskan prop key unik ke setiap elemen yang dipetakan dari array.

<Menu
    anchorEl={notificationAnchorEl}
    anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
    transformOrigin={{ vertical: 'top', horizontal: 'right' }}
    open={isNotificationMenuOpen}
    onClose={this.handleNotificationMenuClose}
>
    {notifications.map((notification, i) => (
        <MenuItem
           key={i}
           onClick={this.handleNotificationMenuClose}
        >
            <NotificationItem someProp={notification.someProp}/>
        </MenuItem>
    ))}
</Menu>
person darksmurf    schedule 14.02.2019
comment
Itu salah. Jika Anda melihat dokumentasi, tipe props komponen adalah Component, itu juga diuraikan Komponen yang digunakan untuk node root. Entah string untuk menggunakan elemen DOM atau komponen. - person ManavM; 14.02.2019
comment
Benar, Anda dapat menggunakan komponen jika Anda mau, tetapi Anda tidak dapat meneruskan properti apa pun ke komponen tersebut (seperti yang diminta oleh pertanyaan Anda). Oleh karena itu, Anda harus menempatkan komponen di dalam MenuItem itu sendiri. - person darksmurf; 14.02.2019
comment
Terima kasih telah menunjukkan prop key, namun saya mungkin akan menghadapi masalah nanti - person ManavM; 14.02.2019
comment
Saya menemukan cara melakukannya di implementasi ListItem di semua tempat...bolehkah memposting jawaban atas pertanyaan Anda sendiri? - person ManavM; 14.02.2019
comment
Saya telah memperbarui jawaban saya untuk membuatnya lebih jelas. Jika Anda merasa memiliki jawaban yang lebih baik, tentu Anda bisa menjawab pertanyaan Anda sendiri. - person darksmurf; 14.02.2019
comment
Meskipun saya akan sangat menghargai jika Anda menghapus dua baris pertama dari jawaban karena tidak benar dan saya tidak ingin menyebarkan informasi yang salah - person ManavM; 14.02.2019

Setelah beberapa penelitian saya menemukan jawabannya di implementasi Komponen ListItem.

Ternyata semua props tambahan yang diberikan kepada ListItem diteruskan ke component.

const {
  component: componentProp,
  ...other
} = props;

const componentProps = { className, disabled, ...other };
let Component = componentProp || 'li';

return (
  <ContainerComponent
    className={classNames(classes.container, ContainerClassName)}
    {...ContainerProps}
  >
    <Component {...componentProps}>{children}</Component>
    {children.pop()}
  </ContainerComponent>
);

^ kode yang relevan dari ListItem.js

Jadi kode berikut akan berfungsi

 {notifications.map(notification => (
   <MenuItem
     component={NotificationItem}
     onClick={this.handleNotificationMenuClose}
     notification={notification}
   />
  ))}
person ManavM    schedule 14.02.2019
comment
Meskipun ini berhasil, alangkah baiknya jika seseorang dapat menjelaskan cara kerjanya dengan skrip ketikan karena akan menyebabkan masalah pengetikan jika saya mencoba menambahkan alat peraga NotificationItem ke MenuItem. - person ManavM; 14.02.2019