React Hooks + Umi Hooks + Ant Design Pro -------- 实时请求数据,监测到数据改变就局部刷新表格

1.前期准备

必要条件1:首先得有一个高级表格,没有自己就去官方文档找一个
必要条件2:高级表格获取数据源方式为request
必要条件3:有umi的包 能用useRequest(setTimeout应该也可以但操作应该不一样)
原因:我用的这个

2.实现

1.定义两个状态

params用来装局部刷新的请求数据
compareData用来装最近两次请求回来的数据

 const [params, setParams] = useState<any>({});
 const [compareData, setCompareData] = useState<any[]>([]);

```javascript
request={async (params, sorter, filter) => {
          setParams(params)
          ......
### 2.创建轮询函数,在其onSuccess函数里将本次请求得到的数据放入

```java
compareData中  const { data, run, cancel } = useRequest(queryTasks, {
    manual: true,
    pollingInterval: 10000,
    pollingWhenHidden: false,
    onSuccess: (result, params) => {
      if (compareData.length < 2) {
        setCompareData([...compareData, result]);
       }
    },
  });

3.当compareData的长度为2时,通过对比,判断是否不同(此处为数组对象所以转字符串来对比)

    ......
    onSuccess: (result, params) => {
      if (compareData.length < 2) {
        setCompareData([...compareData, result]);
      } else if (compareData.length === 2) {
        if (JSON.stringify(compareData[0]) !== JSON.stringify(compareData[1])) {
          console.log(compareData)
        }
      }
    },
  });

4.对比后,如果发生改变就局部刷新表格

  ......
    onSuccess: (result, params) => {
      if (compareData.length < 2) {
        setCompareData([...compareData, result]);
      } else if (compareData.length === 2) {
        if (JSON.stringify(compareData[0]) !== JSON.stringify(compareData[1])) {
          console.log(compareData);
          if (actionRef.current) {
            actionRef.current.reload();
          }
        }
      }
    },
  });

5.对比后,删掉第一项,保证下一次对比能正常进行。

    ......
    onSuccess: (result, params) => {
      if (compareData.length < 2) {
        setCompareData([...compareData, result]);
      } else if (compareData.length === 2) {
        if (JSON.stringify(compareData[0]) !== JSON.stringify(compareData[1])) {
          console.log(compareData);
          if (actionRef.current) {
            actionRef.current.reload();
          }
        }
        setCompareData([compareData[1]]);
      }
    },
  });

6.设置当请求条件变更后执行本函数(第一次进入也会执行)

当请求条件变更后即换页,查询等情况,可达到局部对比局部刷新效果
注意需要先停止当前轮询再开始新的

  useEffect(() => {
    cancel(); //先停止当前轮询
    setCompareData([]);
    run(params);
  }, [params]);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值