// 主组件
function UserManagement() {
return (
<div className="user-management">
<UserHeader />
<UserFilters />
<UserList />
<UserPagination />
div>
);
}
// 用户列表组件
function UserList() {
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchUsers = useCallback(async () => {
setLoading(true);
try {
const response = await fetch('/api/users');
const data = await response.json();
setUsers(data);
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
}, []);
useEffect(() => {
fetchUsers();
}, [fetchUsers]);
if (loading) return <LoadingSpinner />;
if (error) return <ErrorMessage message={error} />;
return (
<div className="user-list">
{users.map(user => (
<UserCard key={user.id} user={user} />
))}
div>
);
}
// 用户卡片组件
const UserCard = React.memo(function UserCard({ user }) {
const [isEditing, setIsEditing] = useState(false);
const handleEdit = useCallback(() => {
setIsEditing(true);
}, []);
const handleSave = useCallback(async (updatedUser) => {
try {
await updateUser(updatedUser);
setIsEditing(false);
} catch (error) {
console.error('Failed to update user:', error);
}
}, []);
return (
<div className="user-card">
{isEditing ? (
<UserEditForm
user={user}
onSave={handleSave}
onCancel={() => setIsEditing(false)}
/>
) : (
<UserDisplay
user={user}
onEdit={handleEdit}
/>
)}
div>
);
});