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

什么决定JavaScript ES6 arrow函数何时结束?[复制]

  •  0
  • JCollier  · 技术社区  · 6 年前

    我知道箭头函数体可以包含在方括号中,但是当它没有括号时,什么决定函数何时终止?

    我不确定这个问题是ES6的通用问题,还是ReactJS或JSX特有的问题,但React中有以下函数,在它的正下方,我有一个类声明的开头,它不在函数的范围内:

    const Search = ({ value, onChange, children }) =>
      <form>
        {children} <input 
          type="text"
          value={value} 
          onChange={onChange}
        />
      </form>
    
    class Table extends Component {
      ...
      ...
      ...
    

    这似乎是有效的。函数的什么原因使它不包含类声明?是不是他们之间有空行?它是JSX特有的吗?是因为只有一个容器元素作为函数的主体?还是别的什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Dinesh Pandiyan    6 年前

    您可以用 {}

    const doSomething = () => {
      // ...
      return 'val'; // return statement is optional
    }
    

    {}

    // explicit return
    const doSomething = () => {
      return 'val';
    }
    
    // implicit return
    const doSomething = () => ('val')
    

    您可以用几种不同的方法编写隐式返回

    // implicit return with ()
    const doSomething = () => ('val')
    
    // implicit return without ()
    const doSomething = () => 'val'
    
    // implicit return in next line with ()
    const doSomething = () => 
      ('val')
    
    // implicit return in next line without ()
    const doSomething = () => 
      'val'
    

    这就是React的作用。顶层 <tag> 在React组件中,当babel被转移时,将返回语句 React.createElement(...)

    例如,这个

    const Search = ({ value, onChange, children }) =>
      <form>
        {children} <input 
          type="text"
          value={value} 
          onChange={onChange}
        />
      </form>
    

    将被传送到

    const Search = ({ value, onChange, children }) => React.createElement(...)
    
        2
  •  0
  •   Josh Kelly    6 年前

    在搜索声明中返回一个表达式。编译器读取以表达式结尾(即结束jsx标记)结尾的声明。我个人更喜欢包装我的jsx () => (<div></div>) 只是为了可读性,但是你的代码没有问题。