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,
  },
}
複製代碼

最後

愉快的使用?.操做符。

相關文章
相關標籤/搜索