首页 > 解决方案 > 无法从逻辑或 || 返回箭头函数

问题描述

我有一个场景,我可能不知道是否定义了某个对象属性。如果是,它应该是一个函数,并且应该被调用。如果未定义,则创建备份函数。我这样做是合乎逻辑的||

  // handleGetData may be undefined:
  const { handleGetData, ActionCreators } = fromSomewhere; 

  const getData =
    handleGetData ||
    function () {
      dispatch(
        ActionCreators.GetData({
          params: params
        })
      );
    };

  getData()

这似乎工作得很好,除了 eslint 抱怨 anUnexpected unnamed function 但是当我尝试在 之后返回箭头函数时语法中断||

  const getData =
    handleGetData ||
    () => {             // <------  Parsing error: Expression expected
      dispatch(
        ActionCreators.GetData({
          params: params
        })
      );
    };

为什么是这样?如果handleGetData未定义,getData则 then 的值不应该成为箭头函数,并且仍然可以调用吗?

显示问题的 Codesandbox

标签: javascriptsyntaxlogical-operatorsarrow-functions

解决方案


在函数周围加上括号将解决语法错误:

const getData =
  handleGetData ||
  (() => {
    dispatch(
      ActionCreators.GetData({
        params: params,
      })
    );
  });

eslint 错误很可能是由规则引起的(有关详细信息,func-names请参阅此链接)。您可以通过添加函数名称来修复它,例如handleGetDataFallback

const getData2 =
  handleGetData ||
  function handleGetDataFallback () {
    dispatch(
      ActionCreators.GetData({
        params: params,
      })
    );
  };

推荐阅读