React Hook 遇到的问题集锦

13 篇文章 1 订阅

part1:

需求:

  • 发异步请求修改界面信息
  • 请求结束后重新渲染界面

问题:

  • 当你手速够快,或者请求返回速度够慢的时候,a 行先渲染,再渲染b 行的时候,a 行的结果会变回未修改时的结果

过程:

  • 查看原先的代码
  • import React, { useState } from 'react';
    
    function Bulbs() {
      const [on, setOn] = useState(false);
    
      const switch = () => {
        console.info("switch");
        setTimeout(setOn(!on), 1000);
      }
    
      return (
        <>
          <div className={on ? 'on' : 'off'}>
            延时修改开关状态
          </div>
          <button onClick={switch}>开/关</button>
        </>
      );
    }
  •  双击按钮,会发现并不会把开关关闭掉
  • log 日志正常
  • 查看对应的文档
  • https://zh-hans.reactjs.org/docs/hooks-reference.html#functional-updates
  • 需要改用函数式修改
  • import React, { useState } from 'react';
    
    function Bulbs() {
      const [on, setOn] = useState(false);
    
      const switch = () => {
        console.info("switch");
        setTimeout(setOn(on => !on), 1000);
      }
    
      return (
        <>
          <div className={on ? 'on' : 'off'}>
            延时修改开关状态
          </div>
          <button onClick={switch}>开/关</button>
        </>
      );
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值