Как я могу изменить свой модал, чтобы он отображался по-разному для разных элементов в reactjs?

#reactjs

#reactjs

Вопрос:

Ниже приведен мой код для модала, я использую хуки react. Я хочу, чтобы на моей странице «Наша команда» сведения о разных участниках отображались в модальном режиме для каждого участника.

 <Modal
  aria-labelledby="transition-modal-title"
  aria-describedby="transition-modal-description"
  className={classes.modal}
  open={open}
  onClose={handleClose}
  closeAfterTransition
  BackdropComponent={Backdrop}
  BackdropProps={{
    timeout: 500,
  }}>
  <Fade in={open}>
    <div className={classes.paper}>
      <CloseIcon onClick={handleClose} style={{ float: 'right'}}/>
      <img src={tImg} style={{margin: '20px 0 0 0'}}/>
      <h2 id="transition-modal-title">Transition modal</h2>
      <p id="transition-modal-description">react-transition-group animates me.</p>
    </div>
  </Fade>
</Modal>
  

Комментарии:

1. Добавьте больше деталей. Отформатируйте свой вопрос. У вас может быть универсальный модальный компонент, который принимает реквизиты для отображения динамического содержимого.

2. То, что вы сделали, это задали нам требование и попросили его реализовать. Это ваша работа, не наша.

Ответ №1:

У вас мог бы быть массив employees и он был бы сопоставлен каждому employee, например, вы могли бы использовать структуру, подобную приведенной ниже, и изменить ее в соответствии с вашими потребностями:

 // File: data/employee-data.js
[
  {
    "name": "Bob",
    "about": "My name is Bob, I am an employee at fooCompany"
  },
  {
    "name": "Rob",
    "about": "My name is Rob, I am an employee at fooCompany"
  },
  {
    "name": "Tim",
    "about": "My name is Tim, I am an employee at fooCompany"
  }
]
  

Затем вы могли бы использовать этот компонент для его переноса

 // File: components/Employees/Employees.jsx

import React, { useState } from "react";

import Employee from "./Employee/Employee";
import employeeData from "../data/employee-data.json";

export default () => {
  const [employees, setEmployees] = useState([...employeeData]);
  
  return employees.map(employee => (
    <Employee employee={employee} />
  ))
}
  

А затем создайте общий компонент employee (например, card)

 // File: components/Employees/Employee/Employee.jsx

import React from "react";

export default ({employee}) => {
  const [modalOpen, setModalOpen] = useState(false);
  
  const closeModal = () => setModalOpen(false);
  const openModal = () => setModalOpen(true);

  // return some nice employee component with some information and click action
  return (
    <>
      <div>
        <h1>{employee.name}</h1>
        <p onClick={openModal}>Click here to read more about me</p>
      </div>
      <EmployeeModal
        employee={employee}
        open={modalOpen}
        closeModal={closeModal}
        openModal={openModal}
      />  
    </>
  );
}
  

И затем вы используете свой модальный

 // File: components/Employees/Employee/EmployeeModal/EmployeeModal.jsx

import React from "react";
// your modal imports
// your react-transition imports
// your style imports and other imports

export default ({ employee, open, closeModal, openModal }) => (
  <Modal
    aria-labelledby="transition-modal-title"
    aria-describedby="transition-modal-description"
    className={classes.modal}
    open={open}
    onClose={handleClose}
    closeAfterTransition
    BackdropComponent={Backdrop}
    BackdropProps={{
    timeout: 500,
  }}>
    <Fade in={open}>
      <div className={classes.paper}>
        <CloseIcon onClick={handleClose} style={{ float: 'right'}}/>
        <img src={tImg} style={{margin: '20px 0 0 0'}}/>
        <h2 id="transition-modal-title">{employee.name}</h2>
        <p id="transition-modal-description">{employee.about}</p>
      </div>
    </Fade>
  </Modal>
);
  

Комментарии:

1. Пожалуйста, не отвечайте на вопросы, на которые запрашивающий не приложил никаких усилий. Это побуждает их делать то же самое снова, в отличие от того, чтобы самим прилагать усилия.