首页 > 解决方案 > 重构此函数以降低其在 if else 条件下的认知复杂性

问题描述

由于认知复杂性,我在声纳中遇到错误,请查找我的代码和附加的屏幕截图以供更多参考。请帮我解决这个问题

 useEffect(() => {
    if (isFocused && isLoggedIn) {
      getProfileData();
    }
    if (isFocused) {
      dispatch(rewardsLandingScreenTracker());
    }
  }, [dispatch, getProfileData, isLoggedIn, isFocused]);

在此处输入图像描述

有人也可以更新我在三元运算符的情况下的解决方案是什么

  const savedPrice =
    (actualPrice ? getConvertedPrice(actualPrice) : 0) -
    (proPrice ? getConvertedPrice(proPrice) : 0);

在此处输入图像描述

标签: javascriptreact-nativesonarqubesonarqube-scansonarlint

解决方案


您可以将其重写为:

useEffect(() => {
    if (isFocused) {
        if (isLoggedIn) getProfileData();
        dispatch(rewardsLandingScreenTracker());
    }
}, [dispatch, getProfileData, isLoggedIn, isFocused]);

或者

useEffect(() => {
    if (!isFocused) return
        
    if (isLoggedIn) getProfileData();
    dispatch(rewardsLandingScreenTracker());
}, [dispatch, getProfileData, isLoggedIn, isFocused]);

第二个可能会在返回不一致时引发 lint 错误(取决于您的 linter 设置)。然后你必须return在回调函数的末尾添加显式。


推荐阅读