摘要:使用,不一定非要使用語(yǔ)法,可以使用原生的進(jìn)行開(kāi)發(fā)。注意標(biāo)簽的屬性和,需要寫(xiě)成和。因?yàn)閮蓚€(gè)屬性是的保留字和關(guān)鍵字。在的設(shè)定中,初始化完后,是不可變的。改變會(huì)引起無(wú)法想象的后果。重要的是這個(gè)過(guò)程是由操控的,不是手動(dòng)添賦值的屬性。
深入JSX
JSX可以看作JavaScript的拓展,看起來(lái)有點(diǎn)像XML。使用React,可以進(jìn)行JSX語(yǔ)法到JavaScript的轉(zhuǎn)換。
Why JSX?使用React,不一定非要使用JSX語(yǔ)法,可以使用原生的JS進(jìn)行開(kāi)發(fā)。但是React作者強(qiáng)烈建議我們使用JSX,因?yàn)镴SX在定義類似HTML這種樹(shù)形結(jié)構(gòu)時(shí),十分的簡(jiǎn)單明了。簡(jiǎn)明的代碼結(jié)構(gòu)更利于開(kāi)發(fā)和維護(hù)。
XML有著開(kāi)閉標(biāo)簽,在構(gòu)建復(fù)雜的樹(shù)形結(jié)構(gòu)時(shí),比函數(shù)調(diào)用和對(duì)象字面量更易讀??磦€(gè)直接的對(duì)比:
#使用JSX React.render(, document.getElementById("example") ); #不使用JSX React.render( React.createElement("div", null, React.createElement("div", null, React.createElement("div", null, "content") ) ), document.getElementById("example") );content
HTML 標(biāo)簽 vs. React 組件JSX并不是新語(yǔ)言,也沒(méi)有改變JavaScript的語(yǔ)法,只是對(duì)JavaScript的拓展。
React.render方法可以渲染HTML結(jié)構(gòu),也可以渲染React組件。
渲染HTML標(biāo)簽,聲明變量采用首字母小寫(xiě)
var myDivElement = ; React.render(myDivElement, document.body);
渲染React組件,聲明變量采用首字母大寫(xiě)
var MyComponent = React.createClass({/*...*/}); var myElement =; React.render(myElement, document.body);
通過(guò)變量的聲明,來(lái)區(qū)分HTML標(biāo)簽和React組件,這個(gè)可以看作一個(gè)約定吧。
注意:標(biāo)簽的屬性class和for,需要寫(xiě)成className和htmlFor。因?yàn)閮蓚€(gè)屬性是JavaScript的保留字和關(guān)鍵字。無(wú)論你是否使用JSX。
#使用JSX React.render( , document.getElementById("example") ); #不使用JSX React.render( React.createElement("label", {className: "xxx", htmlFor: "input"}, "content"), document.getElementById("example") );轉(zhuǎn)化
React JSX將類似XML的語(yǔ)法轉(zhuǎn)化到原生的JavaScript,元素的標(biāo)簽、屬性和子元素都會(huì)被當(dāng)作參數(shù)傳給React.createElement函數(shù):
#JSX var Nav; var app = ; #native JS var Nav; var app = React.createElement(Nav, {color:"blue"});JS表達(dá)式
表達(dá)式用{}包起來(lái),不要加引號(hào),加引號(hào)就會(huì)被當(dāng)成字符串。
JSX是HTML和JavaScript混寫(xiě)的語(yǔ)法,當(dāng)遇到<,JSX就當(dāng)HTML解析,遇到{就當(dāng)JavaScript解析。
屬性表達(dá)式React.render(子表達(dá)式1 ? "class-a" : "class-b"}>content, document.body );
var Nav = React.createClass({ render: function () { return注釋nav} }); React.render({2 > 1 ? :, document.body );div}
同JavaScript注釋一樣
單行注釋 // comments
多行注釋 /* comments */
JSX延伸屬性 不要改變props如果提前就知道了組件的屬性的話,寫(xiě)起來(lái)很容易。例如component組件有兩個(gè)動(dòng)態(tài)的屬性foo和bar:
var component =;
而實(shí)際上,有些屬性可能是后續(xù)添加的,我們沒(méi)辦法一開(kāi)始就確定,我們可能會(huì)寫(xiě)出下面不好的代碼:
var component =; component.props.foo = x; // bad component.props.bar = y; // also bad
這樣寫(xiě)是錯(cuò)誤的,因?yàn)槲覀兪謩?dòng)直接添加的屬性React后續(xù)沒(méi)辦法檢查到屬性類型錯(cuò)誤,也就是說(shuō),當(dāng)我們手動(dòng)添加的屬性發(fā)生類型錯(cuò)誤時(shí),在控制臺(tái)是看不到錯(cuò)誤信息的。
在React的設(shè)定中,初始化完props后,props是不可變的。改變props會(huì)引起無(wú)法想象的后果。
延伸屬性為了解決這個(gè)問(wèn)題,React引入了屬性延伸
var props = {}; props.foo = x; props.bar = y; var component =;
當(dāng)需要拓展我們的屬性的時(shí)候,定義個(gè)一個(gè)屬性對(duì)象,并通過(guò){...props}的方式引入,React會(huì)幫我們拷貝到組件的props屬性中。重要的是—這個(gè)過(guò)程是由React操控的,不是手動(dòng)添賦值的屬性。
需要覆蓋的時(shí)候可以這樣寫(xiě):
var props = { foo: "default" }; var component =JSX 陷阱 style屬性;
在React中寫(xiě)行內(nèi)樣式時(shí),要這樣寫(xiě),不能采用引號(hào)的書(shū)寫(xiě)方式
React.render(HTML轉(zhuǎn)義xxxxx, document.body );
比如我們有一些內(nèi)容是用戶輸入的富文本,從后臺(tái)取到數(shù)據(jù)后展示在頁(yè)面上,希望展示相應(yīng)的樣式
var content="content"; React.render({content}, document.body );
結(jié)果頁(yè)面直接輸出內(nèi)容了:
React默認(rèn)會(huì)進(jìn)行HTML的轉(zhuǎn)義,避免XSS攻擊,如果要不轉(zhuǎn)義,可以這么寫(xiě):
var content="content"; React.render( , document.body );
頁(yè)面效果:
自定義HTML屬性如果在編寫(xiě)React過(guò)程中使用了自定義屬性,React不會(huì)渲染的
React.render(content, document.body );
要想使用得這么寫(xiě):
React.render(content, document.body );
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85618.html
摘要:學(xué)習(xí)筆記之解讀前端技術(shù)不多說(shuō),大腿很粗什么是是的核心組成部分,它使用標(biāo)記的方式去直接聲明界面,界面組件之間可以互相嵌套。它的目的是通過(guò)各種編譯器將這些標(biāo)記編譯成標(biāo)準(zhǔn)的語(yǔ)言。的標(biāo)簽與函數(shù)名都是使用的駝峰命名。目前,一個(gè)的,只能返回一個(gè)節(jié)點(diǎn)。 React.js學(xué)習(xí)筆記之JSX解讀 @(前端技術(shù)) Why React? 不多說(shuō),F(xiàn)acebook大腿很粗 什么是JSX JSX是React的核心...
摘要:前言以深入學(xué)習(xí)技術(shù)棧為線索,記錄下學(xué)習(xí)的重要知識(shí)內(nèi)容。要傳入時(shí),必須使用屬性表達(dá)式。如果要使用自定義屬性,要使用前綴這與標(biāo)準(zhǔn)是一致的。 前言 以《深入學(xué)習(xí)react技術(shù)?!窞榫€索,記錄下學(xué)習(xí)React的重要知識(shí)內(nèi)容。本系列文章沒(méi)有涵蓋全部的react知識(shí)內(nèi)容,只是記錄下了學(xué)習(xí)之路上的重要知識(shí)點(diǎn),一方面是自己的總結(jié),同時(shí)拿出來(lái)和在學(xué)習(xí)react的人們一塊分享,共同進(jìn)步。 正文 一:rea...
摘要:我們使用最基本的事就是用來(lái)展現(xiàn)數(shù)據(jù)。使得展現(xiàn)數(shù)據(jù)變得簡(jiǎn)單,并且當(dāng)數(shù)據(jù)改變時(shí),能自動(dòng)保持的更新。使用了內(nèi)部的虛擬,當(dāng)數(shù)據(jù)發(fā)生改變,先在虛擬中計(jì)算變化,最后將變動(dòng)的部分反應(yīng)到真實(shí)的中??梢园阉醋饔兄蜖顟B(tài)并且可以返回結(jié)構(gòu)的函數(shù)。 我們使用UI最基本的事就是用來(lái)展現(xiàn)數(shù)據(jù)。React使得展現(xiàn)數(shù)據(jù)變得簡(jiǎn)單,并且當(dāng)數(shù)據(jù)改變時(shí),React能自動(dòng)保持UI的更新。 開(kāi)始 創(chuàng)建一個(gè)簡(jiǎn)單的Demo: ...
閱讀 3027·2023-04-25 22:16
閱讀 2363·2021-10-11 11:11
閱讀 3300·2019-08-29 13:26
閱讀 658·2019-08-29 12:32
閱讀 3470·2019-08-26 11:49
閱讀 3095·2019-08-26 10:30
閱讀 2013·2019-08-23 17:59
閱讀 1579·2019-08-23 17:57