当前位置:首页 > React

react如何分view层和model层

2026-01-26 06:25:45React

React 中分离 View 和 Model 的方法

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

使用自定义 Hook 封装 Model 逻辑

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

// 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 层。

// 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 模式,自动处理数据绑定。

react如何分view层和model层

// 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 native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…