当前位置:首页 > React

react如何分view层和model层

2026-01-26 06:25:45React

React 中分离 View 和 Model 的方法

在 React 中,分离 View(视图)和 Model(数据逻辑)可以通过多种方式实现。以下是几种常见的方法:

使用自定义 Hook 封装 Model 逻辑

将数据获取、状态管理、业务逻辑等封装到自定义 Hook 中,组件仅负责渲染。

react如何分view层和model层

// Model 层 (useUserModel.js)
function useUserModel() {
  const [users, setUsers] = useState([]);

  const fetchUsers = async () => {
    const response = await fetch('/api/users');
    const data = await response.json();
    setUsers(data);
  };

  return { users, fetchUsers };
}

// View 层 (UserList.js)
function UserList() {
  const { users, fetchUsers } = useUserModel();

  useEffect(() => {
    fetchUsers();
  }, []);

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

使用状态管理库(如 Redux)

Redux 提供了明确的分离,Store 作为 Model 层,组件作为 View 层。

react如何分view层和model层

// Model 层 (userSlice.js)
const userSlice = createSlice({
  name: 'users',
  initialState: [],
  reducers: {
    setUsers: (state, action) => action.payload,
  },
});

export const { setUsers } = userSlice.actions;
export default userSlice.reducer;

// View 层 (UserList.js)
function UserList() {
  const users = useSelector(state => state.users);
  const dispatch = useDispatch();

  useEffect(() => {
    fetch('/api/users')
      .then(res => res.json())
      .then(data => dispatch(setUsers(data)));
  }, []);

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

使用 Context API

通过 Context 提供全局状态,实现 Model 和 View 的分离。

// Model 层 (UserContext.js)
const UserContext = createContext();

function UserProvider({ children }) {
  const [users, setUsers] = useState([]);

  const fetchUsers = async () => {
    const response = await fetch('/api/users');
    setUsers(await response.json());
  };

  return (
    <UserContext.Provider value={{ users, fetchUsers }}>
      {children}
    </UserContext.Provider>
  );
}

// View 层 (UserList.js)
function UserList() {
  const { users, fetchUsers } = useContext(UserContext);

  useEffect(() => {
    fetchUsers();
  }, []);

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

使用 MVC/MVVM 模式库

MobX 等库支持 MVVM 模式,自动处理数据绑定。

// Model 层 (UserStore.js)
class UserStore {
  users = [];

  fetchUsers = flow(function* () {
    const response = yield fetch('/api/users');
    this.users = yield response.json();
  });
}

// View 层 (UserList.js)
const UserList = observer(() => {
  const { users, fetchUsers } = useContext(userStore);

  useEffect(() => {
    fetchUsers();
  }, []);

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
});

选择建议

  • 简单应用:自定义 Hook 或 Context API
  • 复杂状态:Redux 或 MobX
  • 需要响应式数据:MobX
  • 需要中间件支持:Redux

每种方法都能有效分离关注点,根据项目复杂度选择合适方案。

标签: reactview
分享给朋友:

相关文章

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…