展示组件(Presentationalcomponent)和容器组件 (Containercomponent)之间有何不同?
这两个是 React 架构设计中的经典概念
展示组件(Presentational Component)
作用:
负责 UI 展示 —— 即“长什么样”。
特点:
- 
只关心如何显示数据,不关心数据从哪里来。 
- 
一般通过 props 接收数据和事件回调。 
- 
不直接依赖 Redux 或业务逻辑。 
- 
可以写成 函数组件 或简单的 Vue 组件。 
- 
可被复用、可测试性强。 
示例:
// 展示组件 (只渲染 UI,不处理数据)
function UserList({ users, onSelect }) {
  return (
    <ul>
      {users.map(user => (
        <li key={user.id} onClick={() => onSelect(user)}>
          {user.name}
        </li>
      ))}
    </ul>
  );
}
容器组件(Container Component)
作用:
负责业务逻辑 —— 即“做什么事”。
特点:
- 
负责 数据获取、状态管理、逻辑控制。 
- 
通过 Redux、Hooks 或 API 调用 获取数据。 
- 
把数据和回调函数通过 props 传递给展示组件。 
- 
一般不会有太多 HTML/JSX。 
示例:
// 容器组件 (管理数据,调用展示组件)
import { useSelector, useDispatch } from 'react-redux';
import { fetchUsers } from './userSlice';
import UserList from './UserList';
function UserContainer() {
  const dispatch = useDispatch();
  const users = useSelector(state => state.users.list);
  useEffect(() => {
    dispatch(fetchUsers());
  }, [dispatch]);
  const handleSelect = (user) => {
    console.log('Selected:', user);
  };
  return <UserList users={users} onSelect={handleSelect} />;
}
核心区别对比
| 对比点 | 展示组件 (Presentational) | 容器组件 (Container) | 
|---|---|---|
| 主要职责 | 负责 UI 展示 | 负责数据逻辑和状态管理 | 
| 是否访问 Redux/Store | 否 | 是 | 
| 数据来源 | props | Redux / API / Hooks | 
| 是否复用性高 | ✅ 高 | ❌ 一般较低 | 
| 是否包含业务逻辑 | ❌ 否 | ✅ 是 | 
| 示例 | <UserList /> | <UserContainer /> | 
现代趋势
在 React Hooks 出现后,这种严格划分的界限变得模糊了。
你可以在同一个组件里用 useState、useEffect 同时处理逻辑和展示。
但在大型项目中,保持「UI 与逻辑分层」仍然是很好的实践。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号