React:真正理解三个常用

文章讨论了React中使用useState管理状态时,关于数组操作和组件渲染的问题。在直接修改数组并使用setArray时,由于数组引用不变,组件不会重新渲染。正确的做法是使用setArray接收当前状态的回调函数,以确保每次更新都基于最新的状态。另外,文中通过示例说明了不正确操作会导致的屏幕渲染覆盖问题。
摘要由CSDN通过智能技术生成

1.事件的回调

2.组件渲染判断

3.state工作原理

const [array,setArray]=useState([1,2,3])

1.数组引用的是特定的内存块,直接更改数组,但是数组指向的引用不会改变,而组件的更新依赖于它指向的引用是否变化;引用的变化依赖于setArray

function App() {

  const [array,setArray]=useState([1,2,3])

  function addToStart(number){
    array.unshift(number)
    setArray(array)
    // setArray([number,...array])
  }

  function addToEnd(number){
    array.push(number)
    setArray(array)
    // setArray([...array,number])
  }
  
  return (
    <div className="App">
      
      {array.join(",")}//屏幕上渲染1,2,3
      <br/>
      <button
        onClick={()=>{
          addToStart(0)
          addToEnd(0)
          console.log(array)//点击按钮:控制台打印0,1,2,3,0;屏幕渲染不变
        }}
      ></button>
    </div>
  );
}

2.array数组的改变是在组件下一次渲染时,即做完本次改变,渲染到屏幕上后,下一次改变时会拿到array本次改变后的值

function addToStart(number){
    // array.unshift(number)
    // setArray(array)
    setArray([number,...array])
  }

  function addToEnd(number){
    // array.push(number)
    // setArray(array)
    setArray([...array,number])
  }

将上述函数的setState改成这样:

初次点击:屏幕上(1,2,3,0);控制台(1,2,3)

第二次点击:屏幕上(1,2,3,0,0);控制台(1,2,3,0)

原因是,addToStart函数在本次更新中将(1,2,3)->(0,1,2,3,);addToEnd函数在本次更新中将(1,2,3)->(1,2,3,0)  屏幕只渲染一次,后面的将前面的覆盖掉了

3.正确写法是将setState写成可将当前状态传递的回调函数

function addToStart(number){
    // array.unshift(number)
    // setArray(array)
    // setArray([number,...array])
    setArray((curArr)=>[number,...curArr])
  }

  function addToEnd(number){
    // array.push(number)
    // setArray(array)
    // setArray([...array,number])
    setArray((curArr)=>[...curArr,number])
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值