关于弹窗组件

来源:10-7 弹框封装、创建用户接口实现

kejin

2023-08-08

老师,关于弹窗组件的实现,除了您给出的两种方案, 可以用下面例子的方法实现吗?如果可以的话各有什么优缺点?

import React, { useState } from 'react';

// 弹窗组件
function Modal({ isOpen, closeModal, userData, setUserData }) {
  if (!isOpen) {
    return null;
  }

  const handleChange = (event) => {
    setUserData({ ...userData, [event.target.name]: event.target.value });
  };

  return (
    <div>
      <h2>编辑用户信息</h2>
      <form>
        <label>
          用户名:
          <input name="username" value={userData.username} onChange={handleChange} />
        </label>
        <label>
          邮箱:
          <input name="email" value={userData.email} onChange={handleChange} />
        </label>
      </form>
      <button onClick={closeModal}>关闭</button>
    </div>
  );
}

// 用户管理页面
function UserManagement() {
  const [modalOpen, setModalOpen] = useState(false);
  const [userData, setUserData] = useState({ username: '', email: '' });

  const openModal = (user) => {
    setUserData(user);
    setModalOpen(true);
  };

  const closeModal = () => {
    setModalOpen(false);
  };

  const users = [
    // 用户数据
  ];

  return (
    <div>
      <h1>用户管理</h1>
      {users.map(user => (
        <div key={user.id}>
          <h2>{user.username}</h2>
          <button onClick={() => openModal(user)}>编辑</button>
        </div>
      ))}
      <Modal isOpen={modalOpen} closeModal={closeModal} userData={userData} setUserData={setUserData} />
    </div>
  );
}

export default UserManagement;

写回答

1回答

河畔一角

2023-08-08

你这并不是一个弹框组件吧,都没有Modal,你定义的Modal只是一个表单。 假设你漏写了Modal,这种写法也是可以的,但是耦合太严重,你应该能发现很多变量都要定义在父组件里面,课程封装的套路实际上就是一个ref来关联的,弹框的所有功能都在组件内部闭合了。

1
0

React18+TS 通用后台管理系统解决方案落地实战

全面提升React高阶技能,灵活驾驭各类后台管理系统开发痛点

624 学习 · 226 问题

查看课程