最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?JSX深入淺出理解

 更新時(shí)間:2022年12月30日 08:40:32   作者:碼農(nóng)小菲  
React使用JSX來(lái)替代常規(guī)的JavaScript。JSX是一個(gè)看起來(lái)很像 XML的JavaScript語(yǔ)法擴(kuò)展。我們不需要一定使用 JSX,但它有以下優(yōu)點(diǎn):JSX執(zhí)行更快,因?yàn)樗诰幾g為JavaScript代碼后進(jìn)行了優(yōu)化。它是類型安全的,在編譯過(guò)程中就能發(fā)現(xiàn)錯(cuò)誤。使用JSX編寫(xiě)模板更加簡(jiǎn)單快速

概述 

  • jsx 本質(zhì)是React.createElement(component, props, …children)的語(yǔ)法糖
  • component 指定 React 元素的類型
  • React 必須在作用域內(nèi)
  • 在 JSX 類型中可以使用點(diǎn)語(yǔ)法
  • 不能將通用表達(dá)式作為 React 元素類型
  • js表達(dá)式可以作為props傳遞給 jsx
  • Props 默認(rèn)值為 “True”
  • 布爾類型、Null 以及 Undefined 不會(huì)被渲染

React.createElement(component, props, …children)語(yǔ)法糖

	//如下 JSX 代碼:
	<MyButton color="blue" shadowSize={2}>
	  Click Me
	</MyButton>
    //會(huì)編譯為:
    React.createElement(
	  MyButton,
	  {color: 'blue', shadowSize: 2},
	  'Click Me'
	)
		//如果沒(méi)有子節(jié)點(diǎn),你還可以使用自閉合的標(biāo)簽形式,如:
	  <div className="sidebar" />
	  //會(huì)編譯為:
	  React.createElement(
		  'div',
		  {className: 'sidebar'}
		)

指定 React 元素類型

JSX 標(biāo)簽的第一部分指定了 React 元素的類型,大寫(xiě)字母開(kāi)頭的 JSX 標(biāo)簽意味著它們是 React 組件

React 必須在作用域內(nèi)

由于 JSX 會(huì)編譯為 React.createElement 調(diào)用形式,所以 React 庫(kù)也必須包含在 JSX 代碼作用域內(nèi)

 //在如下代碼中,雖然 React 和 CustomButton 并沒(méi)有被直接使用,但還是需要導(dǎo)入:
   import React from 'react';
   import CustomButton from './CustomButton';
   function WarningButton() {
     // return React.createElement(CustomButton, {color: 'red'}, null);
     return <CustomButton color="red" />;
   }

在 JSX 類型中使用點(diǎn)語(yǔ)法

  • 以使用點(diǎn)語(yǔ)法來(lái)引用一個(gè) React 組件
  • 你在一個(gè)模塊中導(dǎo)出許多 React 組件時(shí),這會(huì)非常方便哦
   import React from 'react';
   const MyComponents = {
     DatePicker: function DatePicker(props){
       return <div>Imagine a {props.color} datepicker here.</div>
     }
   }
  function BlueDatePicker() {
    return <MyComponents.DatePicker color="blue" />   
  }

用戶定義的組件必須以大寫(xiě)字母開(kāi)頭

以小寫(xiě)字母開(kāi)頭的元素代表一個(gè) HTML 內(nèi)置組件

如 div 標(biāo)簽 會(huì)編譯為 React.createElement(div)

大寫(xiě)字母開(kāi)頭的元素則對(duì)應(yīng)著在 JavaScript 引入或自定義的組件

如 Foo 標(biāo)簽 會(huì)編譯為 React.createElement(Foo)

 import React from 'react';
// 正確!組件需要以大寫(xiě)字母開(kāi)頭:
function Hello(props) {
  // 正確! 這種 <div> 的使用是合法的,因?yàn)?div 是一個(gè)有效的 HTML 標(biāo)簽:
  return <div>Hello {props.toWhat}</div>;
}
function HelloWorld() {
  // 正確!React 知道 <Hello /> 是一個(gè)組件,因?yàn)樗谴髮?xiě)字母開(kāi)頭的:
  return <Hello toWhat="World" />;
}

在運(yùn)行時(shí)選擇類型

不能將通用表達(dá)式作為 React 元素類型,如果想通過(guò)通用表達(dá)式來(lái)動(dòng)態(tài)決定元素類型,需要首先將它賦值給大寫(xiě)字母開(kāi)頭的變量。

import React from 'react';
import { PhotoStory, VideoStory } from './stories';
   const components = {
     photo: PhotoStory,
     video: VideoStory
   };
   //錯(cuò)誤寫(xiě)法:
   function Story(props) {
     // 錯(cuò)誤!JSX 類型不能是一個(gè)表達(dá)式。
     return <components[props.storyType] story={props.story} />;
   }
  //正確寫(xiě)法:
  function Story(props) {
     // 正確!JSX 類型可以是大寫(xiě)字母開(kāi)頭的變量。
     const SpecificStory = components[props.storyType];
     return <SpecificStory story={props.story} />;
 }

JavaScript 表達(dá)式作為 Props

可以把包裹在 {} 中的 JavaScript 表達(dá)式作為一個(gè) prop 傳遞給 JSX 元素

 <MyComponent foo={1 + 2 + 3 + 4} />

if 語(yǔ)句以及 for 循環(huán)不是 JavaScript 表達(dá)式,所以不能在 JSX 中直接使用,但可以用在 JSX 以外的代碼中

function NumberDescriber(props) {
   let description;
   if (props.number % 2 == 0) {
     description = <strong>even</strong>;
   } else {
     description = <i>odd</i>;
   }
   return <div>{props.number} is an {description} number</div>;
 }

字符串字面量

可以將字符串字面量賦值給 prop

//等價(jià)
<MyComponent message="hello world" />
<MyComponent message={'hello world'} />

將字符串字面量賦值給 prop 時(shí),它的值是未轉(zhuǎn)義的

//等價(jià)
 <MyComponent message="&lt;3" />
<MyComponent message={'<3'} />

Props 默認(rèn)值為 “True” 如果沒(méi)給 prop 賦值,它的默認(rèn)值是 true

//等價(jià)
 <MyTextBox autocomplete />
<MyTextBox autocomplete={true} />

展開(kāi)屬性

可以使用展開(kāi)運(yùn)算符 … 來(lái)在 JSX 中傳遞整個(gè) props 對(duì)象

 function App1() {
    return <Greeting firstName="Ben" lastName="Hector" />;
}
  function App2() {
    const props = {firstName: 'Ben', lastName: 'Hector'};
    return <Greeting {...props} />;
  }

JSX子元素

字符串字面量

<MyComponent>Hello world!</MyComponent>

子元素允許由多個(gè) JSX 元素組成

 <MyContainer>
   <MyFirstComponent />
   <MySecondComponent />
 </MyContainer>

JavaScript 表達(dá)式作為子元素,使用 {} 包裹

//等價(jià)
<MyComponent>foo</MyComponent>
<MyComponent>{'foo'}</MyComponent>
function Item(props) {
 return <li>{props.message}</li>;
}
function TodoList() {
 const todos = ['finish doc', 'submit pr', 'nag dan to review'];
 return (
   <ul>
     {todos.map((message) => <Item key={message} message={message} />)}
   </ul>
 );
}

函數(shù)作為子元素

 // 調(diào)用子元素回調(diào) numTimes 次,來(lái)重復(fù)生成組件
function Repeat(props) {
 let items = [];
 for (let i = 0; i < props.numTimes; i++) {
   items.push(props.children(i));
 }
 return <div>{items}</div>;
}
function ListOfTenThings() {
 return (
   <Repeat numTimes={10}>
     {(index) => <div key={index}>This is item {index} in the list</div>}
   </Repeat>
 );
}
//可以將任何東西作為子元素傳遞給自定義組件,只要確保在該組件渲染之前能夠被轉(zhuǎn)換成 React 理解的對(duì)象。這種用法并不常見(jiàn),但可以用于擴(kuò)展 JSX。

布爾類型、Null 以及 Undefined 將會(huì)忽略,不會(huì)被渲染。如果你想渲染 false、true、null、undefined 等值,需要先將它們轉(zhuǎn)換為字符串:

<div>
   My JavaScript variable is {String(myVariable)}.
 </div>

到此這篇關(guān)于React JSX深入淺出理解的文章就介紹到這了,更多相關(guān)React JSX內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react-native android狀態(tài)欄的實(shí)現(xiàn)

    react-native android狀態(tài)欄的實(shí)現(xiàn)

    這篇文章主要介紹了react-native android狀態(tài)欄的實(shí)現(xiàn),使?fàn)顟B(tài)欄顏色與App顏色一致,使用戶界面更加整體。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • React模擬實(shí)現(xiàn)Vue的keepAlive功能

    React模擬實(shí)現(xiàn)Vue的keepAlive功能

    Vue中,keep-alive組件可以緩存組件狀態(tài),在路由切換時(shí)重新掛載,實(shí)現(xiàn)這一功能在React中并不簡(jiǎn)單,但我們可以借助一個(gè)第三方庫(kù)——react-activation 來(lái)模擬Vue的keep-alive功能,需要的朋友可以參考下
    2024-10-10
  • react中value與defaultValue的區(qū)別及說(shuō)明

    react中value與defaultValue的區(qū)別及說(shuō)明

    這篇文章主要介紹了react中value與defaultValue的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • React中的Refs屬性你來(lái)了解嗎

    React中的Refs屬性你來(lái)了解嗎

    這篇文章主要為大家詳細(xì)介紹了的React?Refs屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • react antd checkbox實(shí)現(xiàn)全選、多選功能

    react antd checkbox實(shí)現(xiàn)全選、多選功能

    目前好像只有table組件有實(shí)現(xiàn)表格數(shù)據(jù)的全選功能,如果說(shuō)對(duì)于list,card,collapse等其他組件來(lái)說(shuō),需要自己結(jié)合checkbox來(lái)手動(dòng)實(shí)現(xiàn)全選功能,這篇文章主要介紹了react antd checkbox實(shí)現(xiàn)全選、多選功能,需要的朋友可以參考下
    2024-07-07
  • react實(shí)現(xiàn)消息顯示器

    react實(shí)現(xiàn)消息顯示器

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)消息顯示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 編寫(xiě)React組件項(xiàng)目實(shí)踐分析

    編寫(xiě)React組件項(xiàng)目實(shí)踐分析

    本文通過(guò)實(shí)例給大家分享了編寫(xiě)React組件項(xiàng)目實(shí)踐的全過(guò)程,對(duì)此有興趣的朋友可以參考下。
    2018-03-03
  • React精髓!一篇全概括小結(jié)(急速)

    React精髓!一篇全概括小結(jié)(急速)

    這篇文章主要介紹了React精髓!一篇全概括小結(jié)(急速),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • JavaScript中的useRef 和 useState介紹

    JavaScript中的useRef 和 useState介紹

    這篇文章主要給大家分享的是 JavaScript中的useRef 和 useState介紹,下列文章,我們將學(xué)習(xí) useRef 和 useState hook是什么,它們的區(qū)別以及何時(shí)使用哪個(gè)。 這篇文章中的代碼示例將僅涉及功能組件,但是大多數(shù)差異和用途涵蓋了類和功能組件,需要的朋友可以參考一下
    2021-11-11
  • 淺談React的React.FC與React.Component的使用

    淺談React的React.FC與React.Component的使用

    本文主要介紹了React的React.FC與React.Component的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論

普洱| 丹棱县| 龙里县| 汶上县| 重庆市| 慈溪市| 汕尾市| 施秉县| 壤塘县| 边坝县| 青浦区| 苏州市| 历史| 阜新| 崇信县| 喀什市| 西昌市| 陆丰市| 霞浦县| 霍州市| 奎屯市| 天门市| 南皮县| 疏附县| 宁津县| 卢龙县| 台前县| 日土县| 东兴市| 陵川县| 固始县| 永济市| 日照市| 彭阳县| 讷河市| 宁陵县| 潮州市| 鲁甸县| 嘉荫县| 太湖县| 德兴市|