useState无效

正常来讲点击button按钮发生onClick事件,然后重新调用函数返回新的jsx,然后react再通过新旧jsx进行对比来重新渲染。

function App() {
  const [friends, setFriends] = useState(['tom', 'lucy'])
  
  function addFriends() {
    friends.push('jack');
    setFriends(friends)
  }
  
  return (
    <div className="App">
      {
        friends.map((friend) => {
          return (
            <li>{friend}</li>
          )
        })
      }
      <button onClick={addFriends}>add friends</button>
    </div>
  );
}

现在定义一个数组friends,用react hook—useState来创建和添加friends数组,返回setFriends函数用来修改friends,添加button按钮,点击button执行addFriends函数。addFriends函数将friends添加jack,并通过setFriends来修改friends,但是并没有改变这是因为setFriends内部做了优化,判断其实friends指针并没有发生变化,因此并没有重新渲染。
那么该怎么办呢?只要想办法让指针发生变化就可以了

function App() {
  const [friends, setFriends] = useState(['tom', 'lucy'])
  
  function addFriends() {
    setFriends([...friends, 'jack'])
  }
  
  return (
    <div className="App">
      {
        friends.map((friend) => {
          return (
            <li>{friend}</li>
          )
        })
      }
      <button onClick={addFriends}>add friends</button>
    </div>
  );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值