代码之家  ›  专栏  ›  技术社区  ›  Peter Kellner

如果在react函数组件中不返回JSX,如何形成一个类型脚本规则/配置

  •  3
  • Peter Kellner  · 技术社区  · 7 年前

    我犯了多次错误,忘记了从函数组件返回JSX。也就是说,我做了如下的事情:

    const Hello = function Hello({name}) {
      <div>Hello  {name}</div>
    }
    

    const Hello = function Hello({name}) {
      return <div>Hello  {name}</div>
    }
    

    我完全知道这是错误的原因,但我经常将不需要返回的ES6语法与此混淆。

    是否有任何帮助typescript可以提供给我,以便我在运行它之前将其视为一个错误,并得到错误消息说返回可能丢失?

    https://stackblitz.com/edit/react-ts-badreturn?file=Hello.tsx

    2 回复  |  直到 7 年前
        1
  •  4
  •   Titian Cernicova-Dragomir    7 年前

    React.FunctionComponent<P>

    import * as React from 'react';
    
    const Hello: React.FunctionComponent<{ name: string }> = function Hello({name}) { // error  Type 'void' is not assignable to type 'ReactElement<any>'
        <div>Hello  {name}</div> 
    }
    

    import * as React from 'react';
    
    const Hello = function Hello({name}) : React.ReactElement<any> { // error  Type 'void' is not assignable to type 'ReactElement<any>'
        <div>Hello  {name}</div> 
    }
    // arrow function 
    const Hello = ({name}) : React.ReactElement<any> => { // error  Type 'void' is not assignable to type 'ReactElement<any>'
        <div>Hello  {name}</div> 
    }
    

    即使没有这些注释,typescript仍然会有帮助,如果您尝试使用错误的 Hello

    另一种选择是将tslint与 no-unused-expression

    未使用的表达式是表达式语句,它们不是赋值或函数调用(因此通常没有操作)。

        2
  •  0
  •   AviatorX    7 年前

    import React from 'react';
    
    const Hello = function Hello(props: {name: string}) {
      <div>Hello  {props.name}</div>
    }
    
    export default Hello;
    

    Error in 0.8.16/lib/invariant.js (42:15)
    Hello(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.