Skip to content
鼓励作者:欢迎打赏犒劳

react常用操作

动态类名

使用classnames优化类名处理

比如下面的写法,但是如果你要判断的 类名多的话 就非常的麻烦

jsx
<button className={disabled ? 'btn btn-disabled' : 'btn'}>按钮</button>

安装依赖

shell
npm i classnames
jsx
// 使用 classnames 优化类名处理
// 按钮的样式:
//  btn btn-disabled btn-small btn-large
import { useState } from 'react'

import classNames from 'classnames'

const App = () => {
  // 是否禁用
  const [disabled, setDisabled] = useState(false)
  // 大小
  const [size, setSize] = useState('small')

  return (
    <div>
      {/* 逻辑与 && --- 适用于处理单个类名*/}
      <button className={classNames('btn', disabled && 'btn-disabled')}>
        按钮
      </button>

      {/* 对象语法 --- 适用于处理多个类名 */}
      <button
        className={classNames('btn', {
          'btn-disabled': disabled,
          'btn-small': size === 'small',
          'btn-large': size === 'large',
        })}
      >
        按钮
      </button>
      <hr />
      <div>
        操作:
        <button onClick={() => setDisabled(true)}>禁用</button>
        <button onClick={() => setSize('small')}>变小</button>
        <button onClick={() => setSize('large')}>变大</button>
      </div>
    </div>
  )
}

export default App

DOM操作

用法也很简单,需要利用useRef事先声明一个ref对象,然后将它赋值给某个DOM就可以了。

jsx
import { useRef } from 'react'

const App = () => {
  const inputRef = useRef(null)

  // 注意:不要在组件渲染时,使用 ref 进行 DOM 操作,这个时候值为null
  console.log(inputRef.current)

  return (
    <div>
      <input ref={inputRef} />
      <hr />
      <button onClick={() => console.log(inputRef.current.value)}>
        获取文本框的值
      </button>
      <button onClick={() => inputRef.current.focus()}>获得焦点</button>
    </div>
  )
}

export default App

修改变量值

修改对象

注意:可能如果有些对象会比较复杂,我们可以用下面的方法来简化操作

https://react.dev/learn/updating-objects-in-state#write-concise-update-logic-with-immer

如有转载或 CV 的请标注本站原文地址