国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

React:JSX

2018-06-19 10:55 更新
JSX,全稱:JavaScript XML,一種在React組件內(nèi)部構(gòu)建標(biāo)簽的類XML語法。React使用JSX來替代常規(guī)的JavaScript。

JSX的特征
  • JSX是一種句法變換---每一個JSX節(jié)點都對應(yīng)著一個JavaScript函數(shù)
  • JSX既不提供也不需要運行時庫
  • JSX并沒有改變或添加JavaScript的語義---它只是簡單的函數(shù)調(diào)用而已。

雖然React并不強(qiáng)制使用JSX語法,但是使用JSX有不少好處
  • 運行使用熟悉的語法來定義HTML元素樹。
  • JSX執(zhí)行更快,因為它在編譯為JavaScript代碼后進(jìn)行了優(yōu)化。
  • 它是類型安全的,在編譯過程中就能發(fā)現(xiàn)錯誤。
  • 提供更加語義化且易懂的標(biāo)簽。
  • 是原生的JavaScript


JSX簡單使用

ReactDOM.render(

    <h1>Hello,world!</h1>,

    document,getElementById('example')

);

注意:由于React.render方法只能解析一個標(biāo)簽,也就是只能包含一個頂層標(biāo)簽,如果要放多個標(biāo)簽,可以將多個標(biāo)簽放到一個div內(nèi);多個組件同樣是一個道理。
多個標(biāo)簽:

ReactDOM.render(

  <div>

    <h1>Hello</h1>

    <p>一起學(xué)習(xí)吧</p>

  </div>,

  document.getElementById('example')

);

多個組件:

var Hello=React.createClass({

  render:function(){

    return (

      <div className="item">Hello</div>

    );

  }

});

var World=React.createClass({

  render:function(){

    return (

      <div>world</div>

    );

  }

});

ReactDOM.render(

  <div>

    <Hello/><World/>

  </div>,

  document.getElementById('example')

);


//結(jié)果:helloworld


使用動態(tài)值
JSX將兩個花括號之間的內(nèi)容{..}渲染為動態(tài)值?;ɡㄌ杻?nèi)指明了一個JavaScript上下文環(huán)境:在花括號中放入的任何東西都會被進(jìn)行求值。
JSX 的基本語法規(guī)則:遇到 HTML 標(biāo)簽(以 < 開頭),就用 HTML 規(guī)則解析;遇到代碼塊(以 { 開頭),就用 JavaScript 規(guī)則解析。

簡單值:

var text='Hello world';

ReactDOM.render(

  <div>{text}</div>,

  document.getElementById('example')

);

//結(jié)果:Hello world

函數(shù)

function dateToString(d){

  return [

    d.getFullYear(),

    d.getMonth()+1,

    d.getDate()

  ].join('-');

};

ReactDOM.render(

  <div>{dateToString(new Date())}</div>,

  document.getElementById('example')

);


//結(jié)果:2016-9-4

數(shù)組:JSX 允許在模板中插入數(shù)組,數(shù)組會自動展開所有成員

var text=['hello','world'];

ReactDOM.render(

  <div>{text}</div>,

  document.getElementById('example')

);


//結(jié)果:helloworld


子節(jié)點
React將開始標(biāo)簽與結(jié)束標(biāo)簽之間的所有子節(jié)點保存在一個名為this.props.children的特殊組件屬性中。

var Divider=React.createClass({

  render:function(){

    return (

      <div className="divider">

        <h2>{this.props.children}</h2>

      </div>

    )

  }

});


ReactDOM.render(

  <Divider>Props</Divider>,

  document.getElementById('example')

)

//渲染結(jié)果:

<div class="divider">

  <h2>Props</h2>

</div>


在上面的例子里,this.props.children == ['Props']。

JSX與HTML有何不同?

1.屬性
在HTML中,我們用內(nèi)聯(lián)的方式給每個節(jié)點設(shè)置屬性:

<div id="id" class="className"></div>

而在JSX中,是這樣的:

var id='id';

var className='className';

<div id={id} className={className}></div>

格式都是一致,只不過引號換成了大括號。
更為復(fù)雜的情景,還可以把屬性設(shè)置為一個函數(shù)調(diào)用返回的結(jié)果。

<div className={this.getClassName()}></div>

React每渲染一個組件時,指定的變量和函數(shù)會被求值,而最終生成的DOM結(jié)果會反映出這個新的狀態(tài)。

2.條件判斷
在JSX中加入if語句會渲染出無效的JavaScript,但還是有方法的:

  • 使用三目運算符
  • 設(shè)置一個變量并在屬性中引用
  • 將邏輯轉(zhuǎn)化到函數(shù)中
  • 使用&&運算符

使用三目運算符

render:function(){

  return (

    <div className={this.state.isActive?'active':''}></div>

  )

}


使用變量

getIsActive:function(){

  return this.state.isActive?'active':''

}


render:function(){    

  return ( 

    var isActive=this.getIsActive();  

    <div className={isActive}></div>   

  )  

}


使用函數(shù)

getIsActive:function(){

  return this.state.isActive?'active':''

}


render:function(){    

  return ( 

    <div className={this.getIsActive()}></div>   

  )  

}


使用邏輯與(&&)運算符

在React中,null或false是不會輸出任何內(nèi)容的。

render:function(){

  return <div className={this.state.isActive && 'active'}></div>

}

如果這個布爾值為true,那么后面的值將會輸出。


非DOM屬性

  • key
  • ref
  • dangerousSetInnerHTML


鍵(key)

key是一個可選的唯一標(biāo)識符。


引用(ref)

ref運行父組件在render方法之外保持對子組件的一個引用。

render:function(){

  return (

    <div>  <input ref='myInput'/> </div>

  )

}

當(dāng)設(shè)置了ref后,我們就可以在組件的任何地方使用 this.refs.myInput 獲取這個引用了。通過引用獲取到的這個對象被稱為 支持實例 。它并不是真的DOM,而是React在需要時用來創(chuàng)建DOM的一個描述對象。

我們可以使用 this.refs.myInput.getDOMNode() 訪問真實的DOM節(jié)點。


事件


在所有瀏覽器中,事件名已經(jīng)被規(guī)范化并統(tǒng)一用駝峰形式表示,例如,click變成了onClick,change變成了onChange。

handleClick:function(event){},

render:function(){

  return <div onClick={this.handleClick}></div>

}

注意:React自動綁定了組件所有方法的作用域,我們永遠(yuǎn)不需要去手動綁定。


注釋

在JSX語法中,有兩種方式添加注釋:

  • 當(dāng)作一個元素的子節(jié)點
  • 內(nèi)聯(lián)在元素的屬性中

作為子節(jié)點
子節(jié)點形式的注釋只需要簡單的包裹在花括號內(nèi)即可,并且可以跨行

<div>

  {/*注釋*/}

  <p></p>

</div>


作為內(nèi)聯(lián)屬性

<div>

  <p

  /*注釋*/

  ></p>

</div>


特殊屬性

由于JSX最后是轉(zhuǎn)換為原生的JavaScript的,所以有一些關(guān)鍵詞是不能使用的,例如:

用 htmlFor 代替 for 

用 className 代替 class 


樣式

React把所有的內(nèi)聯(lián)樣式都規(guī)范化為了駝峰形式,如果你使用過原生的JavaScript中的DOM的style屬性,就會發(fā)現(xiàn)兩者是一致的。

var styles={

  borderColor:'#000',

  borderRadius:'5'

}

React.createClass({

  render:function(){

    return (<div style={styles}></div>)

  }

})


React 的 JSX 里約定分別使用首字母大、小寫來區(qū)分本地組件的類和 HTML 標(biāo)簽。


如果往原生 HTML 元素里傳入 HTML 規(guī)范里不存在的屬性,React 不會顯示它們。如果需要使用自定義屬性,要加 data- 前綴。

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


以 aria- 開頭的 [網(wǎng)絡(luò)無障礙] 屬性可以正常使用。

<div aria-hidden={true} />


題外話:

最近好像React的中文官網(wǎng)好像秀逗了,直接點擊進(jìn)去都是英文,如果需要查看中文版,可以這樣:

英文:http://reactjs.cn/react/docs/getting-started.html

中文:http://reactjs.cn/react/docs/getting-started-zh-CN.html

就是加上-zh-CN




以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號