Javascript ES6之间的差异()=>;()和()=>;{}

Javascript ES6之间的差异()=>;()和()=>;{},javascript,reactjs,ecmascript-6,react-jsx,Javascript,Reactjs,Ecmascript 6,React Jsx,我见过一段代码,类似于学习时的反应 const LinkCell = ({rowIndex, data, col, ...props}) => ( <Cell {...props}> <a href="#">{data.getObjectAt(rowIndex)[col]}</a> </Cell> ); 第一个与第二个有何不同?使用()=>()语法想象一下,如果有一个隐式的返回语句,例如()=>{return()}()=>(

我见过一段代码,类似于学习时的反应

const LinkCell = ({rowIndex, data, col, ...props}) => (
  <Cell {...props}>
    <a href="#">{data.getObjectAt(rowIndex)[col]}</a>
  </Cell>
);
第一个与第二个有何不同?

使用()=>()语法想象一下,如果有一个隐式的返回语句,例如()=>{return()}

()=>()
()=>{doSomething()或return;}
的一行简写

无论如何,如果您需要更多的操作并且需要不止一行语句,您应该选择
()=>{}
语法,否则您可以使用速记语法
()=>()

以下语句也被视为一行语句。但是要与
()=>()
语法一起使用,您需要在不使用
return
语句的情况下重写它

// The below one line statement can be rewritten as below
if (true ) return something;

// rewritten of above one
() => ( a > b ? a : b)

// one line statement
if (true ) invoke();  // This will go like, () => (a ? a.invoke() : b.invoke())

// one line statement
for(var i in results) doSomething();

//And your jsx statement which can be tread as one liner
<Cell {...props}>
    <a href="#">{data.getObjectAt(rowIndex)[col]}</a>
  </Cell>
//下面的一行语句可以重写如下
如果(真)返回某物;
//重写上述一个
()=>(a>b?a:b)
//单行语句
if(true)invoke();//这将类似于,()=>(a?a.invoke():b.invoke())
//单行语句
对于(结果中的var i)doSomething();
//还有你的jsx语句,它可以作为一行

第二个也可以写入-
让sum=(a,b)=>a+b
With
()=>()
第二组括号用于分组,因此它不需要
return
关键字,而
{}
@nnnn
()=>(…)
用于React的JSX。如果我没弄错的话,它表示JSX。但是
=>{…}
用语句创建一个新块,而
=>(…)
类似于
=>{return(…)}
。箭头后面的值是返回值,除非您隐式地创建一个新块。@AndrewLi-我不使用JSX,但是
()=>()
在纯(ES6)JS中是完全有效的(假设您实际上在第二个括号中放入了一些内容)。@AndrewLi:The
(…)
与JSX无关。它们似乎只是为了可读性而添加的。它们也可以在不改变功能的情况下被省略用于在React中的无状态组件中返回JSX。它相当于
(…)=>{return(…);}
(…)
表示JSX。同意,此
JSX
被视为一行语句,例如
if(true)invoke()谢谢你的解释。不幸的是,我认为我不能用我目前的声誉来投票。”()=>()是()=>{doSomething()或return;}的一行简写。“不,它将相当于
()=>{return();}
。为这个表单提供正确的术语将非常有用,这就是“简明体”。
// The below one line statement can be rewritten as below
if (true ) return something;

// rewritten of above one
() => ( a > b ? a : b)

// one line statement
if (true ) invoke();  // This will go like, () => (a ? a.invoke() : b.invoke())

// one line statement
for(var i in results) doSomething();

//And your jsx statement which can be tread as one liner
<Cell {...props}>
    <a href="#">{data.getObjectAt(rowIndex)[col]}</a>
  </Cell>