中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript的React框架中的JSX語法學習入門教程
來源:易賢網 閱讀:1132 次 日期:2016-08-02 14:57:17
溫馨提示:易賢網小編為您整理了“JavaScript的React框架中的JSX語法學習入門教程”,方便廣大網友查閱!

這篇文章主要介紹了JavaScript的React框架中的JSX語法學習入門教程,React是由Facebook開發并開源的高人氣js框架,需要的朋友可以參考下

什么是JSX?

在用React寫組件的時候,通常會用到JSX語法,粗看上去,像是在Javascript代碼里直接寫起了XML標簽,實質上這只是一個語法糖,每一個XML標簽都會被JSX轉換工具轉換成純Javascript代碼,當然你想直接使用純Javascript代碼寫也是可以的,只是利用JSX,組件的結構和組件之間的關系看上去更加清晰。

var MyComponent = React.createClass({/*...*/});

var myElement = <MyComponent someProperty={true} />;

React.render(myElement, document.body);

一個XML標簽,比如<MyComponent someProperty={true} />會被JSX轉換工具轉換成什么呢?

比如:

var Nav = React.createClass({/*...*/});

var app = <Nav color="blue"><Profile>click</Profile></Nav>;

會被轉化為:

var Nav = React.createClass({/*...*/});

var app = React.createElement(

 Nav,

 {color:"blue"},

 React.createElement(Profile, null, "click")

);

那么也就是說,我們寫一個XML標簽,實質上就是在調用React.createElement這個方法,并返回一個ReactElement對象。

ReactElement createElement(

 string/ReactClass type,

 [object props],

 [children ...]

)

這個方法的第一個參數可以是一個字符串,表示是一個HTML標準內的元素,或者是一個ReactClass類型的對象,表示我們之前封裝好的自定義組件。第二個參數是一個對象,或者說是字典也可以,它保存了這個元素的所有固有屬性(即傳入后基本不會改變的值)。從第三個參數開始,之后的參數都被認作是元素的子元素。

JSX轉化器

要把帶有JSX語法的代碼轉化為純Javascript代碼,有多種方式,對于內聯與HTML中的代碼或者是未經過轉化的外部文件,在script標簽中要加上type="text/jsx",并引入JSXTransformer.js文件即可,不過這種方式并不建議在生產環境使用,建議的方法是在代碼上線前就將代碼轉換好,可以使用npm全局安裝react-tools:

npm install -g react-tools

并使用命令行工具轉化即可(具體用法可以參考jsx -h):

jsx src/ build/

如果使用自動化工具,比如gulp的話,可以使用相應插件gulp-react。

HTML模板中使用JS

在HTML模板中使用JS非常方便,只需要用大括號把JS代碼括起來即可。

var names = ['Alice', 'Emily', 'Kate']; 

React.render( 

<div> 

names.map(function (name) { 

return <div>Hello, {name}!</div> 

}) 

</div>, 

document.getElementById('example') 

); 

編譯出來就變成了這樣:

var names = ['Alice', 'Emily', 'Kate']; 

React.render( 

 React.createElement("div", null, names.map(function (name) { 

 return React.createElement("div", null, "Hello, ", name, "!") 

 }) ), 

 document.getElementById('example') 

); 

要注意的是,大括號實際就是一個變量輸出表達式,JSX最終就是直接把花括號中的內容作為 React.createElement 的第三個參數直接傳入了(沒有任何修改直接傳入),所以其中只能放一行表達式,并且任何不能直接作為第三個參數的寫法都是錯的,那么你這樣寫就是錯的:

React.render( 

<div> 

var a = 1; 

names.map(function (name) { 

return <div>Hello, {name}!</div> 

}) 

</div>, 

document.getElementById('example') 

); 

因為很明顯其中花括號內的內容直接放在第三個參數上,語法不對。

這么寫也是錯的:

React.render( 

<div> 

var a = 1; 

</div>, 

document.getElementById('example') 

); 

因為 React.createElement(“div”, null, var a = 1;) 是語法錯誤。

那么你也可以理解為什么大括號中的js表達式不能有分號結尾了吧。

需要注意的是,如果你在屬性中輸出JS變量,是不能加引號的,不然會被當做字符串而不被解析。

應該是這樣:

<a title={title}>鏈接</a>

使用HTML標簽

要創建一個HTML標準中存在的元素,直接像寫HTML代碼一樣即可:

var myDivElement = <div className="foo" />;

React.render(myDivElement, document.body);

不過需要注意的是class和for這兩個屬性,JSX語法最終是要被轉換為純Javascript的,所以要和在Javascript DOM中一樣,用className和htmlFor。

還有一點是,在創建HTML標準內的元素時,JSX轉化器會丟棄那些非標準的屬性,如果一定要添加自定義屬性,那么需要在這些自定義屬性之前添加data-前綴。

<div data-custom-attribute="foo" />

命名空間式組件

比如開發組件的時候,一個組件有多個子組件,你希望這些子組件可以作為其父組件的屬性,那么可以像這樣用:

var Form = MyFormComponent;

var App = (

 <Form>

 <Form.Row>

  <Form.Label />

  <Form.Input />

 </Form.Row>

 </Form>

);

這樣你只需將子組件的ReactClass作為其父組件的屬性:

var MyFormComponent = React.createClass({ ... });

MyFormComponent.Row = React.createClass({ ... });

MyFormComponent.Label = React.createClass({ ... });

MyFormComponent.Input = React.createClass({ ... });

而創建子元素可以直接交給JSX轉化器:

var App = (

 React.createElement(Form, null,

  React.createElement(Form.Row, null,

   React.createElement(Form.Label, null),

   React.createElement(Form.Input, null)

  )

 )

);

該功能需要0.11及以上版本

Javascript表達式

在JSX語法中寫Javascript表達式只需要用{}即可,比如下面這個使用三目運算符的例子:

// Input (JSX):

var content = <Container>{window.isLoggedIn ? <Nav /> : <Login />}</Container>;

// Output (JS):

var content = React.createElement(

 Container,

 null,

 window.isLoggedIn ? React.createElement(Nav) : React.createElement(Login)

);

不過要注意的是,JSX語法只是語法糖,它的背后是調用ReactElement的構造方法React.createElement的,所以類似這樣的寫法是不可以的:

// This JSX:

<div id={if (condition) { 'msg' }}>Hello World!</div>

// Is transformed to this JS:

React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");

可以從轉化后的Javascript代碼中看出明顯的語法錯誤,所以要不用三目運算符,要不就這樣寫:

if (condition) <div id='msg'>Hello World!</div>

else <div>Hello World!</div>

傳播屬性(Spread Attributes)

在JSX中,可以使用...運算符,表示將一個對象的鍵值對與ReactElement的props屬性合并,這個...運算符的實現類似于ES6 Array中的...運算符的特性。

var props = { foo: x, bar: y };

var component = <Component { ...props } />;

這樣就相當于:

var component = <Component foo={x} bar={y} />

它也可以和普通的XML屬性混合使用,需要同名屬性,后者將覆蓋前者:

var props = { foo: 'default' };

var component = <Component {...props} foo={'override'} />;

console.log(component.props.foo); // 'override'

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产婷婷97碰碰久久人人蜜臀| 亚洲精品网站在线播放gif| 国产精品r级在线| 亚洲久久一区二区| 免费观看亚洲视频大全| 亚洲人成7777| 国产精品大全| 欧美一级视频一区二区| 国产专区精品视频| 老妇喷水一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 影音先锋久久久| 久久国产精品久久久| 亚洲国产高清在线| 欧美金8天国| 午夜欧美精品| 亚洲人成网站影音先锋播放| 欧美日韩四区| 久久女同精品一区二区| 一区二区久久| 黄色在线一区| 国产精品久久久久一区| 欧美激情区在线播放| 午夜在线一区| 亚洲福利精品| 国产欧美日韩在线播放| 欧美精品久久久久久久| 久久久99国产精品免费| 亚洲午夜久久久久久久久电影院 | 欧美激情一区二区三级高清视频 | av成人手机在线| 国模叶桐国产精品一区| 一区二区三区四区五区在线| 久久久五月婷婷| 亚洲在线视频免费观看| 亚洲精品日韩一| 女主播福利一区| 国产精品视频一区二区高潮| 欧美aaa级| 性欧美大战久久久久久久免费观看| 91久久精品视频| 一区二区在线观看视频| 国产精品99免费看| 欧美日韩精品| 欧美日韩ab片| 欧美日韩精品久久久| 欧美成人精品影院| 美女被久久久| 欧美国产高潮xxxx1819| 欧美成人久久| 欧美久久综合| 欧美日韩免费视频| 欧美日韩高清区| 欧美另类视频在线| 欧美日韩高清在线| 欧美亚州一区二区三区| 欧美色中文字幕| 国产精品99免视看9| 国产精品豆花视频| 国产精品婷婷| 国产视频久久久久久久| 国产在线拍偷自揄拍精品| 国产一区二区| 在线不卡免费欧美| 亚洲激情欧美| 日韩午夜精品| 亚洲欧美日韩一区| 久久精品视频网| 嫩草国产精品入口| 欧美精品999| 国产精品久久久一区二区三区| 国产精品久久久久99| 国产精品视频一| 国内自拍视频一区二区三区| 在线观看欧美亚洲| 999亚洲国产精| 性18欧美另类| 欧美成人一区二区三区在线观看 | 久久亚洲精选| 欧美大尺度在线| 欧美三日本三级三级在线播放| 欧美午夜精品久久久久久人妖 | 国内免费精品永久在线视频| 国产精品久久久久久妇女6080| 欧美视频日韩视频在线观看| 国产精品欧美一区喷水| 国内精品久久久久久久影视蜜臀 | 亚洲黑丝在线| 日韩午夜电影av| 99国产精品久久久久久久| 亚洲视频一区二区| 性刺激综合网| 欧美大香线蕉线伊人久久国产精品| 欧美精品在欧美一区二区少妇| 欧美视频一区二区在线观看 | 久久精品视频亚洲| 欧美国产亚洲视频| 国产农村妇女精品| 亚洲高清视频一区二区| 亚洲视频观看| 免费不卡在线观看av| 国产精品一区二区你懂得| 韩国在线一区| 亚洲一区视频在线观看视频| 久久精品国产一区二区三| 欧美精品一区二区三区在线播放| 国产精品成人aaaaa网站| 影音欧美亚洲| 欧美中文字幕久久| 欧美人体xx| 狠狠干成人综合网| 亚洲免费伊人电影在线观看av| 葵司免费一区二区三区四区五区| 国产精品久久久久久妇女6080 | 欧美激情第六页| 欧美激情一区二区三区蜜桃视频| 国产亚洲欧洲997久久综合| 亚洲国产精品电影在线观看| 亚洲一区二区三区色| 欧美精品黄色| 亚洲三级影片| 欧美激情自拍| 亚洲激情在线| 米奇777超碰欧美日韩亚洲| 黄色一区二区三区四区| 欧美综合国产| 国产欧美丝祙| 亚久久调教视频| 国产精品一级二级三级| 亚洲综合成人婷婷小说| 国产精品久久久久久模特 | 91久久国产综合久久蜜月精品| 久久av老司机精品网站导航| 国产精品一区二区三区久久| 亚洲在线观看视频网站| 国产精品久久久久久久午夜片| 亚洲亚洲精品三区日韩精品在线视频| 欧美成人午夜剧场免费观看| 亚洲国产欧美国产综合一区| 久久视频在线看| 亚洲第一在线| 蜜桃av噜噜一区| 亚洲国产日韩欧美一区二区三区| 欧美大胆人体视频| 亚洲国产精品毛片| 欧美激情黄色片| 亚洲经典自拍| 欧美日韩中文字幕综合视频 | 一区二区久久| 欧美精品粉嫩高潮一区二区 | 亚洲欧美三级在线| 国产精品日韩精品欧美精品| 欧美一级一区| 亚洲国产小视频| 欧美午夜美女看片| 欧美在线一区二区| 亚洲人被黑人高潮完整版| 欧美色网一区二区| 欧美影院一区| 91久久国产综合久久蜜月精品 | 国产欧美日韩综合| 免费久久99精品国产| 宅男噜噜噜66一区二区| 国产真实乱子伦精品视频| 精品动漫一区| 亚洲卡通欧美制服中文| 欧美色欧美亚洲另类七区| 欧美一区二区三区免费观看| 精品不卡一区二区三区| 欧美日韩国内| 欧美中文日韩| 亚洲国产综合在线| 国产精品尤物| 麻豆精品91| 欧美在线视频一区二区三区| 韩国福利一区| 欧美日韩国产色视频| 亚洲综合欧美日韩| 亚洲激情精品| 国产麻豆日韩| 欧美三级特黄| 久久久精品一区| 一区二区三区 在线观看视| 黄色影院成人| 国产精品成人国产乱一区| 久久久亚洲影院你懂的| av成人免费观看| 国产欧美精品在线观看| 欧美成人免费视频| 久久人人97超碰精品888| 午夜精品区一区二区三| 在线一区二区日韩| 亚洲人屁股眼子交8| 国产麻豆视频精品| 国产精品va| 你懂的成人av| 毛片一区二区| 午夜视频在线观看一区二区三区| 亚洲电影在线| 国产精品永久免费视频|