dva踩坑 - 多个dispatch最终只触发一个

在前端开发使用dva时,遇到组件中多个dispatch仅触发一次的问题。问题出现在同一页面的不同组件调用同一接口,导致部分数据未正确显示。通过检查发现,model中的effect使用了`takeLatest`,修改为`all`后解决了问题,确保所有组件都能正常获取数据。通过深入学习dva文档找到了问题根源。
摘要由CSDN通过智能技术生成

近日,遇到两个问题,这里简单描述一下:

第一个问题:在同一个页面,分别有两个不同的组件,调用了同一个接口,进入network面板发现两个接口都请求了并正常返回数据。另外介绍一下该数据的用途,第一个组件中用于构建一颗树直接展示在页面,另一个功能是第二个组件中用于构成下拉框的数据筛选来源。
呈现在页面上的bug:第一个组件的树状图形没有呈现出来,但是下拉框的筛选项能正常出现。。。

再来说第二个问题:在一个页面,有一个数组map返回的函数式组件,由于业务需要,在每个组件内部也都调用了同一个接口,用于请求该相同组件对应的数据。
呈现的bug:只有数组里最后一个组件进行了dispatch.then()这部分的操作,进行debugger也只有最后一个组件会进入.then里面执行对应操作

开始奇妙的解决问题思路:

  1. 既然无法进入dispatch.then里面执行,那我就不把代码写在then内,加个async…await
    下面展示一些 内联代码片

原先代码长这样:

	// 没去掉.then之前
	/* 查询标签详情 */
    const queryLabelDetail = useCallback(
        async (selectedLabelName, selectedLabelId) => {
   
            if (!selectedLabelId || !selectedLabelName) return;
            setSelectedLabelId(selectedLabelId);
            await dispatch({
   
                type: 'group/queryLabelDetail',
                payload: {
   
                    labelName: selectedLabelName,
                    labelId: selectedLabelId,
                },
            }).then((res) => {
   
            	// 只有最后一个组件会进入到这里
            	debugger
				if (!res || res.data.statusCode !== 200) return;
	            const data = res?.data?.data;
	            setOptTypes(data?.opts || []);
	            setRangeOptions(
	                data?.values?.map(item => ({
   
	                    ...item,
	                    label: item.name,
	                })) || [],
	            );
	            setGame
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值