代码之家  ›  专栏  ›  技术社区  ›  PositiveGuy

React组件上的ESLint规则:方法呈现预期无返回值

  •  2
  • PositiveGuy  · 技术社区  · 9 年前

    在渲染器中返回某些内容

    export default class SearchTabs extends Component {
      render() {
        const { panels, selectedTab } = this.props;
        if (!panels || panels.length === 0) return;
    
        let filter = null;
    
        const tabs = panels.member.map((panel, idx) => {
          const { id: panelId, headline } = panel;
          const url = getHeaderLogo(panel, 50);
          const item = url ?
            <img src={url} alt={headline} /> : headline;
          const classname = classNames([
            searchResultsTheme.tabItem,
            (idx === selectedTab) ? searchResultsTheme.active : null,
          ]);
    
          filter = (idx === selectedTab) ? this.renderFilters(panel) : filter;
    
          return (
            <TabItem
              classname={`${classname} search-tab`}
              headline={headline}
              idx={idx}
              content={item}
              onclick={() => {
                this.tabChanged(idx, headline);
              }}
              panelId={panelId}
            />
          );
        });
    
        return (
          <div className={searchResultsTheme.filters}>
            <ul className={`${searchResultsTheme.tabs} ft-search-tabs`}>{tabs}</ul>
            <div className={searchResultsTheme.dropdown}>{filter}</div>
          </div>
        );
      }
    }
    
    3 回复  |  直到 9 年前
        1
  •  2
  •   TLadd    9 年前

    我相信你的问题是线路

    if (!panels || panels.length === 0) return;
    

    它抱怨是因为此代码路径不返回任何内容。尝试将其更改为

    if (!panels || panels.length === 0) return null;
    
        2
  •  2
  •   Pulasthi Bandara    9 年前

    正因为如此, if (!panels || panels.length === 0) return; . 如果返回类型不明确,EsLint会发出警告,因为这会返回未定义的对象,然后返回ReactDom对象。

    if (!panels || panels.length === 0) return null;

        3
  •  2
  •   Dekel    9 年前

    consistent-return eslint,它确保您拥有的每个函数始终具有相同的返回选项:

    function doSomething(condition) {
    
        if (condition) {
            return true;
        } else {
            return;                   /*error Expected a return value.*/
        }
    }
    
    function doSomething(condition) {
    
        if (condition) {
            return;
        } else {
            return true;              /*error Expected no return value.*/
        }
    }
    
    function doSomething(condition) { /*error Expected to return a value at the end of this function.*/
    
        if (condition) {
            return true;
        }
    }
    

    在像javascript这样的语言中,不能强制函数返回特定类型/确保它总是返回某些东西(不是未定义的)之类的东西是有道理的。


    https://eslint.org/docs/2.0.0/rules/consistent-return

    在您的特定代码中,您有3个返回选项。其中2个返回jsx,1个返回undefined,这导致了这个特定的eslint错误。