当前位置:首页 > React

react如何实现修改dom

2026-01-24 23:10:03React

直接操作 DOM(不推荐)

在 React 中直接操作 DOM 通常是不推荐的做法,因为这违背了 React 的设计原则。React 通过虚拟 DOM 来高效更新真实 DOM,直接操作可能导致状态不一致。

使用 ref 获取 DOM 节点:

import { useRef } from 'react';

function MyComponent() {
  const myRef = useRef(null);

  const handleClick = () => {
    myRef.current.style.color = 'red';
  };

  return (
    <div>
      <div ref={myRef}>This is a DOM element</div>
      <button onClick={handleClick}>Change Color</button>
    </div>
  );
}

使用 React 状态管理(推荐)

通过改变状态来让 React 自动更新 DOM 是最佳实践:

react如何实现修改dom

import { useState } from 'react';

function MyComponent() {
  const [color, setColor] = useState('black');

  const handleClick = () => {
    setColor('red');
  };

  return (
    <div>
      <div style={{ color }}>This is a DOM element</div>
      <button onClick={handleClick}>Change Color</button>
    </div>
  );
}

使用 useEffect 处理副作用

当需要在 DOM 更新后执行操作时:

import { useEffect, useRef } from 'react';

function MyComponent() {
  const myRef = useRef(null);

  useEffect(() => {
    if (myRef.current) {
      myRef.current.focus();
    }
  }, []);

  return <input ref={myRef} />;
}

动态修改 className

通过条件渲染修改类名:

react如何实现修改dom

function MyComponent() {
  const [isActive, setIsActive] = useState(false);

  return (
    <div className={isActive ? 'active' : ''}>
      Content
      <button onClick={() => setIsActive(!isActive)}>Toggle</button>
    </div>
  );
}

使用 dangerouslySetInnerHTML

在极少数需要设置原始 HTML 的情况下:

function MyComponent() {
  const htmlContent = '<span>Raw HTML</span>';

  return <div dangerouslySetInnerHTML={{ __html: htmlContent }} />;
}

使用 Portal 渲染到其他 DOM 节点

将内容渲染到 DOM 树的其他位置:

import { createPortal } from 'react-dom';

function Modal({ children }) {
  return createPortal(
    <div className="modal">{children}</div>,
    document.getElementById('modal-root')
  );
}

分享给朋友:

相关文章

vue如何实现重新实现主题

vue如何实现重新实现主题

动态主题切换的实现 在Vue中实现动态主题切换,通常需要结合CSS变量和状态管理。通过修改根元素的CSS变量值,可以全局改变应用的主题样式。 定义主题相关的CSS变量在根元素中: :root…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

如何评价react native

如何评价react native

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

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工…

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数…