js 可选链操做符(javascript-optional-chaining)使用

可选链操做符是一个新的js api,它容许读取一个被链接对象的深层次的属性的值而无需明确校验链条上每个引用的有效性。目前处于Stage 3提案阶段,暂时不能够直接使用,能够经过babel编译器使用。javascript

可选链操做符(?.)

语法

obj?.prop
obj?.[expr]
func?.(args)
复制代码

使用介绍

好比,咱们有一个对象obj,如今要访问它的深层属性baz。java

const obj = {
  foo: {
    bar: {
      baz: 42,
      fun: ()=>{}
    },
  },
};

// 不使用?.
let baz = obj && obj.foo && obj.foo.bar && obj.foo.bar.baz;

// 使用?.
let baz = obj?.foo?.bar?.baz; // 结果:42
复制代码

函数调用和表达式react

// 函数调用
obj.fn?.()
// 表达式
obj?.['prop' + 'Name] 复制代码

使用

咱们能够经过babel编译器来使用能够链操做符。git

babel

yarn add @babel/plugin-proposal-optional-chaining --dev
复制代码

添加.babelrc文件github

{
  "plugins": ["@babel/plugin-proposal-optional-chaining"]
}
复制代码

在create-react-app使用

默认状况下create-react-app,不容许修改babel配置,这里咱们须要安装两个附加模块以容许补充默认配置。json

yarn add customize-cra react-app-rewired --dev
复制代码

添加config-overrides.js文件api

const { useBabelRc, override } = require('customize-cra');
module.exports = override(useBabelRc());
复制代码

修改package.jsonbash

"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test --env=jsdom"
}
复制代码

eslint

安装babel编译器后,就能够使用?.操做符了。可是若是你使用eslint的话,你就须要安装babel-eslint来识别这种新语法。babel

yarn add babel-eslint --dev
复制代码

添加.eslintrc文件markdown

{
  "parser": "babel-eslint",
  "rules": {
    "strict": 0
  }
}
复制代码

在vscode中使用

vscode的js验证器目前并不能识别?.操做符,因此会有错误警告:

解决错误警告:

安装vscode扩展ESLint,在扩展商店搜素并安装ESLint。

修改vscode配置(.vscode/settings.json):

{
  "eslint.alwaysShowStatus": true,
  "eslint.autoFixOnSave": true,
  "javascript.validate.enable": false, // 主要是这个,关闭vscode的js验证器
  "[javascript]": {
    "editor.formatOnSave": false,
  },
  "[javascriptreact]": {
  "editor.formatOnSave": false,
  },
}
复制代码

最后

愉快的使用?.操做符。

相关文章
相关标签/搜索