1.22 要严格遵守状态是不可变的

一、要严格遵守状态是不可变的

  1. 默认情况下,修改状态的值跟上一次相同的情况下,是不会触发重新渲染的

    1. 内部可能会自检,需要注意!

  2. 如果定义了一个数组,那么先对数组做push,在进行set,回不生效,原因React没有检测到数据的变化,因此不会重新渲染

    import { useState } from 'react'
    
    function App() {
      const [count, setCount] = useState(0)
    
      const [list, setList] = useState([
        { id: 1, val: 111 },
        { id: 2, val: 222 },
        { id: 3, val: 333 },
      ])
    
      const handleClick = () => {
        setCount((c) => {
          return c + 1
        })
    
        // 错误做法
        // list.push({ id: 4, val: 444 })
        // setList(list)
    
        // 正确做法
        setList([...list, { id: 4, val: 444 }])
      }
    
      return (
        <>
          <div>Default Template</div>
          <button onClick={handleClick}>点击</button>
          {count}
          <br />
          <ul>
            {list.map((item) => {
              return <li key={item.id}>{item.val}</li>
            })}
          </ul>
        </>
      )
    }
    
    export default App
    

最后更新于