utquidem
Version:
The meta-framework suite designed from scratch for frontend-focused modern web development.
68 lines (51 loc) • 3.27 kB
Markdown
---
title: 使用 ES6+ 语法
---
上一章节中,我们确认了当前 IDE 的编程环境。
这一章节中,我们沿用上一章节的项目和编码环境,实现一个最简单的联系人列表。
Modern.js 支持 `src` 目录下直接使用 ES6+(ES2015+)语法,原则上包括:
1. 已经进入 [Stage 4(完成阶段)](https://github.com/tc39/proposals/blob/master/finished-proposals.md)的语法,包括 ES2015(ES6)到 ES2020(ES11)以及后续版本。
2. 部分很有用且确定性较强(重构也容易)的 [Stage 1(提案阶段)](https://github.com/tc39/proposals/blob/master/stage-1-proposals.md)、[Stage 2(草案阶段)](https://github.com/tc39/proposals#stage-2)、[Stage 3(候选阶段)](https://github.com/tc39/proposals#stage-3)语法,比如:
- [Decorators](https://babeljs.io/docs/en/babel-plugin-proposal-decorators)(默认使用 legacy 提案,可通过 `output.enableLatestDecorators` 使用新版提案)
- [Class Public Properties](https://babeljs.io/docs/en/babel-plugin-proposal-class-properties)
- [Class Private Properties](https://babeljs.io/docs/en/babel-plugin-proposal-private-property-in-object)、[Class Private Methods](https://babeljs.io/docs/en/babel-plugin-proposal-private-methods)
- [Pipeline Operator](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator)(默认为 minimal 提案)
- [Partial Application](https://babeljs.io/docs/en/babel-plugin-proposal-partial-application)
- [Bind Operator](https://babeljs.io/docs/en/babel-plugin-proposal-function-bind)
- [export default from](https://babeljs.io/docs/en/babel-plugin-proposal-export-default-from), [export namespace from](https://babeljs.io/docs/en/babel-plugin-proposal-export-namespace-from)
- [Optional Catch Binding](https://babeljs.io/docs/en/babel-plugin-proposal-optional-catch-binding)
- [Numeric Separator](https://babeljs.io/docs/en/babel-plugin-proposal-numeric-separator)
我们把 `src/App.jsx` 改成:
```js
const getAvatar = users =>
users.map(user => ({
...user,
avatar: `https://avatars.dicebear.com/v2/identicon/${user.name}.svg`,
}));
const mockData =
[
{ name: 'Thomas', email: 'w.kccip@bllmfbgv.dm' },
{ name: 'Chow', email: 'f.lfqljnlk@ywoefljhc.af' },
{ name: 'Bradley', email: 'd.wfovsqyo@gpkcjwjgb.fr' },
{ name: 'Davis', email: '"t.kqkoj@utlkwnpwk.nu' },
] |> getAvatar;
function App() {
return (
<ul>
{mockData.map(({ name, avatar, email }) => (
<li key={name}>
<img src={avatar} width={60} height={60} /> ---
<span>{name}</span> ---
<span>{email}</span>
</li>
))}
</ul>
);
}
export default App;
```
可以看到其中使用了多种 ES6+ 语法(注意生成 mockData 过程中使用了 [Pipeline Operator](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator) 语法),都不需要做任何配置。
运行 `pnpm run dev`,查看运行结果:

---
> 本小节的代码可以在[这里查看](https://github.com/modern-js-dev/modern-js-examples/tree/main/tutorials/c04/hello-modern)。