当前位置:首页 > 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

卸载 React 项目依赖 打开项目根目录下的 package.json 文件,删除所有包含 react、react-dom 或其他 React 相关库的依赖项。保存文件后运行以下命令: npm u…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何调度

react如何调度

React 调度机制概述 React 的调度机制通过 Fiber 架构 和 Scheduler 模块实现任务优先级管理与时间切片(Time Slicing),确保高优先级更新(如用户交互)能快速响应,…

react如何debugger

react如何debugger

调试 React 应用的方法 使用浏览器开发者工具进行调试 React 开发者工具(React DevTools)是调试 React 应用的必备工具。安装 Chrome 或 Firefox 扩展后,可…