关于弹窗组件
来源: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来关联的,弹框的所有功能都在组件内部闭合了。
10
相似问题