为啥用括号括住分配给变量的 JSX 是最佳实践?

Posted

技术标签:

【中文标题】为啥用括号括住分配给变量的 JSX 是最佳实践?【英文标题】:Why is it best practice to surround JSX assigned to variables with parenthesis?为什么用括号括住分配给变量的 JSX 是最佳实践? 【发布时间】:2018-12-27 21:12:33 【问题描述】:

在下面的示例中,x 和 y 的输出相同。我见过两种方式编写的 React 代码。有区别吗?由于我看到的许多 React 代码示例都使用括号语法,我认为这是有原因的。如果这是最佳实践,那么为什么用括号括住分配给变量的 JSX 是最佳实践呢?如果还有其他原因是什么?

let x =  <div> Hello World! </div>;
let y = (<div> Hello World! </div>);

console.log(x,y);

【问题讨论】:

你标题中的问题和正文中的问题不一样。你真正要问的是哪一个? 添加括号的常见原因是覆盖默认运算符优先级(如果结果相同,则此处不需要),或者只是为了使代码读者更清楚意图。 返回多行 JSX 时,最好使用括号,否则您可能会遇到此答案中提到的问题。 ***.com/questions/41898972/… 【参考方案1】:

建议这样做有两个原因,

第一,它帮助 javascript 解释器找到赋值的结尾,因为有时,解释器可能会读取像 return 这样的语句,它出现在代码中间并在那里结束赋值。

第二,它有助于提高可读性和缩进,阅读代码的人都知道赋值结束的地方。当你阅读一个大文件时很容易迷失方向。

return 
  <div> Your text here </div>

将被解释为

return;
<div> Your text here </div>;

所以,为了避免这种情况,最好在 JSX 周围加上括号

return (
    <div> 
       Your text here 
    </div>
)

【讨论】:

【参考方案2】:

为了代码的清晰,一般用括号来包裹 JSX 代码……也就是说,

let y = <ul>
    <li>
        Hello World!
    </li>
</ul>;

丑陋但正确

let y = 
    <ul>
        <li>
            Hello World
        </li>
    </ul>;

格式更好,但语法不正确(编译时会出错)。

所以解决方法是使用

let y = (
    <ul>
        <li>
            Hello World
        </li>
    </ul>
);

这是两全其美的。

更新:第二个代码不正确的原因是Automatic Semicolon insertion。感谢@EricKing 指出这一点。

【讨论】:

要进一步解释为什么第二个例子不正确(以及为什么括号修正它),你可以阅读automatic semicolon insertion。 我认为您答案中的自动分号插入链接不正确。它指出了一些关于 *** 的不相关问题。 @EricKing 另外,使用第二种语法我没有收到任何错误。见codesandbox.io/s/crazy-frog-d05ly。 (如果链接失效,请告诉我)【参考方案3】:

在将 html 代码分配给变量 (jsx) 时,括号不会有太大区别,但我想指出它在使用箭头函数时甚至在制作无状态组件时的优势。

const FunctionName = () => 
 return <p>Hello World </p>;
;

注意在上面的代码中,我们必须在使用花括号的时候编写return关键字,但是如果你想更简洁可以使用括号......

const FunctionName = () => (
 <p> Hello World </p>
); 

//or write it in one line as well

const FunctionName = () => ( <p> Hello World </p> );  

【讨论】:

这似乎没有回答问题..例如为什么不将返回语句写为return (&lt;p&gt;Hello World &lt;/p&gt;); 你可以这样写,但是括号允许你省略return关键字,这是一种更简洁的方式,这实际上是使用括号的原因。我只是没有在上面的回答中明确说明。如果你愿意,我可以编辑我的答案.. 我从来没有说过你所说的不正确..只是它没有回答问题。上述所有编写代码的方式都是正确的,OP 给出的两个示例也是正确的……问题是什么使一个比另一个更好。是的,如果您可以编辑您的答案来解释为什么首选一个而不是首选什么,那就太好了。 圆括号允许你省略return关键字,它删除了这样做的大括号。你可以有const FunctionName = () =&gt; &lt;p&gt; Hello World &lt;/p&gt;;

以上是关于为啥用括号括住分配给变量的 JSX 是最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

用括号括住 JavaScript 语句有啥意义?

c语言中,为啥不能对字符指针变量指向的字符串再赋值?

React 最佳实践:JSX 中的逻辑与函数

杂谈2.py

ansible学习笔记04(最佳实践)

用 JSX 中的 HTML 跨度节点替换字符串中的花括号