React入門教程(2)JSX基礎(chǔ)

JSX中使用表達(dá)式

如果JSX中的代碼超過(guò)一行,我們一般用一個(gè)()進(jìn)行分組處理,遇到html一般都會(huì)單獨(dú)寫(xiě)在一個(gè)新行。

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

再比如:

// 用{}可以直接展示數(shù)據(jù)內(nèi)容個(gè),類似es6模板字符串中的 ${}
function getGreeting(user) {
  if (user) {
    return <h1>Hello, {user}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}

JSX 屬性與{}

你可以使用引號(hào)來(lái)定義以字符串為值的屬性:

const element = <div tabIndex="0"></div>;

也可以使用大括號(hào)來(lái)定義以 JavaScript 表達(dá)式為值的屬性:

const element = <img src={user.avatarUrl} />;

JSX 防注入攻擊

你可以放心地在 JSX 當(dāng)中使用用戶輸入:

const title = <span>你好!</span>;
// 直接使用是安全的:
const element = <h1>{title}</h1>;

React DOM 在渲染之前默認(rèn)會(huì) 過(guò)濾 所有傳入的值。它可以確保你的應(yīng)用不會(huì)被注入攻擊。所有的內(nèi)容在渲染之前都被轉(zhuǎn)換成了字符串。這樣可以有效地防止 XSS(跨站腳本) 攻擊。

數(shù)組的展示

變量是一個(gè)數(shù)組,則會(huì)展開(kāi)這個(gè)數(shù)組的所有成員。

import React, { Component } from 'react';
import './App.css';

class App extends Component {
  render() {
    var arr = [
      <h1>hi, aicoder.com</h1>,
      <h2>React is awesome</h2>,
    ];
    return (
      <div className="App">
        {arr}
      </div>
    );
  }
}
export default App;

最終結(jié)果:

hi, aicoder.com
React is awesome

數(shù)組map輸出一個(gè)列表

App.js如下:

import React, { Component } from 'react';
import './App.css';

class App extends Component {
  render() {
    var arr = ['aicoder.com', 'hamkd.com']
    return (
      <div className="App">
        <h1>aicoder.com</h1>
        <ul>
          {
            arr.map((item, index) =>
              <li>{ index +1 } - { item }</li>
            )
          }
        </ul>
      </div>
    );
  }
}
export default App;

最終結(jié)果:

aicoder.com
1 - aicoder.com
2 - hamkd.com

JSX的最終歸宿

JSX 本質(zhì)會(huì)被編譯成JS,Babel 轉(zhuǎn)譯器會(huì)把 JSX 轉(zhuǎn)換成一個(gè)名為 React.createElement() 的方法調(diào)用。

下面兩種代碼的作用是完全相同的:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);
React.createElement() 這個(gè)方法首先會(huì)進(jìn)行一些避免bug的檢查,之后會(huì)返回一個(gè)類似下面例子的對(duì)象:

// 注意: 以下示例是簡(jiǎn)化過(guò)的(不代表在 React 源碼中是這樣)
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world'
  }
};

這樣的對(duì)象被稱為 “React 元素”。它代表所有你在屏幕上看到的東西。React 通過(guò)讀取這些對(duì)象來(lái)構(gòu)建 DOM 并保持?jǐn)?shù)據(jù)內(nèi)容一致。

參考

  1. 官網(wǎng)文檔
  2. 老馬React視頻地址: https://ke.qq.com/course/379234?tuin=1eb4a0a4
  3. AICODER官網(wǎng)地址:https://www.aicoder.com/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HTML模版 之后出現(xiàn)的React代碼嵌套入模版中。 1. Hello world 這段代碼將一個(gè)一級(jí)標(biāo)題插入到指...
    ryanho84閱讀 6,449評(píng)論 0 9
  • 3. JSX JSX是對(duì)JavaScript語(yǔ)言的一個(gè)擴(kuò)展語(yǔ)法, 用于生產(chǎn)React“元素”,建議在描述UI的時(shí)候...
    pixels閱讀 2,981評(píng)論 0 24
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí),對(duì)React的特性、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,423評(píng)論 2 21
  • 最近看了一本關(guān)于學(xué)習(xí)方法論的書(shū),強(qiáng)調(diào)了記筆記和堅(jiān)持的重要性。這幾天也剛好在學(xué)習(xí)React,所以我打算每天堅(jiān)持一篇R...
    gaoer1938閱讀 1,818評(píng)論 0 5
  • 1、什么是react React.js 是一個(gè)幫助你構(gòu)建頁(yè)面 UI 的庫(kù)。React.js 將幫助我們將界面分成了...
    谷子多閱讀 2,653評(píng)論 1 13

友情鏈接更多精彩內(nèi)容