当前位置:首页 > 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中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

如何构建react

如何构建react

构建 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过命令行验证: node -v npm -v 使用 Create React Ap…

如何调试react

如何调试react

调试 React 应用的方法 使用 React Developer Tools 安装浏览器扩展(Chrome/Firefox),通过组件树查看组件状态、props 和 hooks。支持实时编辑 pro…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…

react 如何引用slider

react 如何引用slider

使用 React 实现 Slider 组件 在 React 中实现 Slider 功能可以通过原生 HTML 的 <input type="range"> 或第三方库(如 react-sl…