改动预估人数显示的BUG

const [predictNum, setPredictNum] = useState('-');
....
let lastParams: Partial<RuleNode>;
function getLabelForecast(params: Partial<RuleNode>) {
    lastParams = params;
    return api.getLabelForecast(params).then((response) => {
        return {response, params};
    });
}
getLabelForecast(ruleNode)
         .then((res) => {
         // console.log('value>>>', lastParams.value, res.params.value);
         // console.log('secondValue>>>', lastParams.value, res.params.value);
           if (res.params.value === lastParams.value && 
                res.params.secondValue === lastParams.secondValue) {
                    setPredictNum(res.response === 0 || 
                        res.response ? res.response : '-');
            }
         })
         .catch((e) => {
              console.error(e);
              message.error(e?.msg || '实时预估异常');
              setPredictNum('-');
         });

// 此处的 BUG => 需要展示 请求回来的预估人数如果是 ‘0’,则显示0。默认展示的是 ‘-’,

//分析:当前达到的需求是默认状态的 ‘-’。返回数据状态为 null,undefined,都可以展示 ‘-’,

// 关键是 请求数据为 “0”时,不显示为0,而是默认的 ‘-’

// 解决:1 通过发送请求,.then拿到res数据,再用if判断将请求回来的数据和 “最后一次”数据对比

//然后再去 setPredictNum();

// if (res.params.value === lastParams.value &&

// res.params.secondValue === lastParams.secondValue && res.response){

// setPredictNum(res.response === 0 || res.response ? res.response : '-')}

// 注意:因为是人数(数值类型)所以只考虑了 “正常状态” 的情况,

// 认为哪怕是最小也是 0,后端不应该返回 空值、未定义 什么的,而不会存在 null,undefined

// 但是这样想错了 “异常状态(服务器宕机了、网络出现异常 => 显示什么 ?)”

// 假设此时后端是不会有任何返回,需要前端做好 突发 “预测”

// 所以不能将异常的情况忽略

// 2 利用手动 设置 res.response = 0/null/undefined,然后

// console.log(res.response)

// console.log('value>>>', lastParams.value, res.params.value);

// console.log('secondValue>>>', lastParams.value, res.params.value);

// 发现还是不能显示请求回来的数据为 0 ,展示为 ‘-’

// 3 最初的改法(这样虽然请求回来为0是可以正常展示 ‘-’,但是 “异常状态” 被忽略了!!!)

// if (res.params.value === lastParams.value &&

// res.params.secondValue === lastParams.secondValue &&

// res.response !== '-') {setPredictNum(res.response ? res.response : 0)}

// 4 思考:原来的 setPredictNum(res.response === 0 || res.response ? res.response : '-');

// 是正确的 它已然实现了对三种情况的考虑和处理,只是目前的if “判断条件” 限制了 请求数据返回为0时的情况

// 那么怎么修改???在此处为难了。===> 柳岸花明又一村

// 回顾之前的思路,当我设置 res.response = 0/null/undefined时,为什么0就是显示不正常?

// 判断条件是否将为0的情况直接拦截了,造成了请求虽然回来了但是没有进入 setPredictNum(),所以默认‘-’

// 然后就发现了最后一个 && res.response 条件的判断考虑到了为0的情况

// (res.params.value === lastParams.value &&

// res.params.secondValue === lastParams.secondValue)

// 修改后直接将最后的判读条件去除掉,这样请求回来数据时0,setPredictNum()中

// 就可以用 || 条件再去检查0、 null、undefined、以及默认为 ‘-’ 的情况了

// 收获:1 考虑细节和场景、情况必须要 “全面!!!”

// 2 在原有的代码基础上修改需求或者BUG同样要考虑 “全面”

// 3 必须将对应改动模块的 “代码” 一行一行的看个明白,按层次缕清思路,步骤,分析理解别人的考量

// 4 有时候的改动需要 “蓦然回首,那 “答案”却在灯火阑珊处” 的思维。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒枫落林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值