React:隐式返回 vs. 显式返回之争,你站哪边?

发布: (2025年12月12日 GMT+8 20:50)
4 min read
原文: Dev.to

Source: Dev.to

参赛者

快速回顾一下我们正在争论的两种写法。

1. 隐式返回(“时尚”写法)

如果你的组件只是一味把 props 直接塞进 JSX,你可以完全省去大括号 {}return 关键字。通常会把 JSX 包在圆括号 () 中。

它看起来简洁、整齐,非常“函数式”。

// 看啊,没大括号!
// 对于简单的展示组件非常干净。
const UserCard = ({ username, avatarUrl }) => (


### {username}


);

2. 显式返回(“安全”写法)

这使用带大括号 {} 的标准块体语法。因为打开了大括号,你必须return 关键字来渲染内容。

只要在渲染之前有任何逻辑、hook 或变量声明,就必须使用这种写法。

const UserCard = ({ user }) => {
  // 渲染前有逻辑...
  const displayName = user.name.toUpperCase();
  const isPremium = user.tier === 'gold';

  // ...所以我们必须显式返回。
  return (


    ### {displayName}


  );
};

灰色地带(争论所在)

没有人会对上面的例子有异议。问题出在灰色地带。

“习惯性显式”

有时我会看到开发者出于习惯使用显式返回,即使在返回之前根本没有任何逻辑。这会多出三行冗余代码(大括号和 return),却没有任何功能上的必要。

“扭曲的隐式”

相反,我也常看到开发者为了保持“时尚”的隐式语法而过度努力。他们会在 JSX 中嵌套四层的三元运算符,只是为了避免打开大括号并在返回前写一个凌乱的 if/else 块。这看起来可能更“酷”,但六个月后阅读起来简直是噩梦。

“陷阱” ⚠️

还有经典的新手错误。如果你尝试隐式返回一个对象字面量(在工具函数或旧版 Redux mapStateToProps 中很常见),JavaScript 会把对象的大括号误认为是函数体的大括号。

// ❌ 错误。返回 undefined。JS 产生混淆。
const getInitialState = () => { id: 1, active: true };

// ✅ 正确。必须把对象包在圆括号里。
const getInitialState = () => ({ id: 1, active: true });

讨论

我的经验法则是:默认使用隐式返回以保持简洁,但一旦 JSX 难以在一次阅读中快速扫描,就改用显式返回。

可读性 > 简洁性。每一次都是如此。

但我知道很多团队会通过严格的 lint 规则来强制其中一种写法。

你怎么看?

  • 你是隐式派(追求简短)还是显式派(追求明确)?
  • 你觉得隐式返回会让代码更难调试吗?

在评论区一起讨论语法吧! 👇

Back to Blog

相关文章

阅读更多 »