立即拿到setState值

有这样的场景:在做react开发的时候,使用setState时,需要拿到最新的state的值,或者打印出最新的state,但是每次打印出来的是上一次的state,而不是最新的。

可以使用如下方法:

// 封装一个公用方法:useSyncCallback.js
import { useEffect, useState, useCallback } from 'react';

// 解决useState导致的只能拿到lastRenderedState问题
const useSyncCallback = callback => {
  const [proxyState, setProxyState] = useState({ current: false });

  const Func = useCallback(() => {
    setProxyState({ current: true });
  }, [proxyState]);

  useEffect(() => {
    if (proxyState.current === true) setProxyState({ current: false });
  }, [proxyState]);

  useEffect(() => {
    proxyState.current && callback();
  });

  return Func;
};

export default useSyncCallback;

使用:

// test.js

// ...
const [isCollapeCell01, setIsCollapeCell01] = useState(false);
const [isCollapeCell02, setIsCollapeCell02] = useState(true);

setIsCollapeCell01(true);
setIsCollapeCell02(false);

// ...
// 保存当前各分组的折叠状态值
  const cells = {
    cell_01: isCollapeCell01,  
    cell_02: isCollapeCell02
  };
  // 记录当前各分组展开/折叠情况
  const saveCurrCell = () => {
    let curCellQuery = JSON.stringify(cells);
    get(  // node中封装的sdk路径,可以替换成自己使用的保存数据的方法
      '/sdk/xxx?' +
        qs.stringify({
          ...auth_info,
          cur_cell: curCellQuery,
        })
    );
  };
  const handleSaveCurrCell = useSyncCallback(() => {
    // 每次都保存的是最新的state,而不是上一个
    saveCurrCell();
  });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值