React入門教程

React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設(shè) Instagram 的網(wǎng)站。做出來以后,發(fā)現(xiàn)這套東西很好用,就在2013年5月開源了

一、HTML的模板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="react.js"></script>
    <script type="text/javascript" src="react-dom.js"></script>
    <script type="text/javascript" src="browser.min.js"></script>
</head>
<body>
    <div id="app"></div>
</body>
<script type="text/babel">
</script>
</html>

上面的代碼要注意的有兩點(diǎn):
一、最后的script標(biāo)簽的type屬性為text/babel。這是因?yàn)镽eact獨(dú)有的JSX語法。和JavaScript不兼容。凡是使用到JSX的地方,都要加上 type="text/babel"
二、上面的代碼引用了三個(gè)庫。react.js、react-dom.js、browser.js,他們引用的順序不能改變。其中,react.js 是React的核心庫,react-dom.js是提供DOM相關(guān)的功能,browser.js的作用是將JSX語法轉(zhuǎn)為JavaScript語法。

二、ReactDOM.render()

ReactDOM.render 是 React 的最基本方法,用于將模板轉(zhuǎn)為 HTML 語言,并插入指定的 DOM 節(jié)點(diǎn)。render的方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是要寫入的模板,第二個(gè)參數(shù)是要插入的節(jié)點(diǎn)。

ReactDOM.render(
  <h1>hello world</h1>,
document.getElementById('app');
)

注意: 第一個(gè)參數(shù)的頂層標(biāo)簽只能有一個(gè),什么意思呢?就是 不可以寫成:

<h1>hello world</h1> <div>我是div</div>

上面這種樣子的

上面代碼的意思是將一個(gè)h1標(biāo)簽插入id名為app節(jié)點(diǎn),運(yùn)行的結(jié)果如下:

hello world

三、JSX語法
上一節(jié)的代碼,HTML語法直接寫在JavaScript語言中,不加引號(hào),這就是JSX語法,它允許HTML與JavaScript的混寫

var str = '我是字符串';
ReactDOM.render(
  <h1{str}</h1>,
  document.getElementById("app")
);

上面的代碼體現(xiàn)了jsx的基本語法規(guī)則:遇到HTML標(biāo)簽(以標(biāo)簽開頭),就用HTML規(guī)則解析;遇到代碼塊(以{}開頭),就用JavaScript規(guī)則解析。上面代碼的運(yùn)行結(jié)果如下:


str

JSX可以遍歷數(shù)組,不過用的是map方法代碼如下:

var arr = ['張三','李四','王五'];
ReactDOM.render(
  <div>
    {
          arr.map(function(v,k){
            return <p key={k}>你好,{v}</p>;
    })
  }
</div>,
document.getElementById('app')
)

效果如下:


arr

上面的代碼有一個(gè)要注意的點(diǎn):
就是return的標(biāo)簽要要加上key值,用來標(biāo)識(shí)唯一。
不然會(huì)報(bào)警告:


error

JSX 允許直接在模板插入 JavaScript 變量。如果這個(gè)變量是一個(gè)數(shù)組,則會(huì)展開這個(gè)數(shù)組的所有成員

var arr = [
<h1 key='1'> 你好世界 </h1>,
<h1 key='2'> 你好朋友 </h1>
];
ReactDOM.render(
  <div>{arr}</div>,
  document.getElementById('app')
)
arr1.png

四、組件 Components

React 允許將代碼封裝成組件(component),然后像插入普通 HTML 標(biāo)簽一樣,在網(wǎng)頁中插入這個(gè)組件。React.createClass 方法就用于生成一個(gè)組件類

var Hello = React.createClass({
  render:function(){
    return <h1>我是hello 組件,姓名是{this.props.name}</h1>
  }
});
ReactDOM.render(
  <Hello name='張三'/>, //這里單雙標(biāo)簽都行
document.getElementById('app');
)

組件的另外一種寫法:

class Hello extends React.Component{
        render(){
            return <div>我是hello 組件,姓名是{this.props.name}</div>;
        }
    }
ReactDOM.render(
  <Hello name='張三'/>, //這里單雙標(biāo)簽都行
document.getElementById('app');
)

效果如下:


component

上面的代碼中:變量 Hello 就是一個(gè)組件類。模板插入 <Hello/> 時(shí),會(huì)自動(dòng)生成** Hello**的一個(gè)實(shí)例。所有的組件都必須有自己的render方法,用于輸出組件。

注意:組件的第一個(gè)字母必須大寫,否則會(huì)報(bào)錯(cuò),比如:Hello 不能寫成hello。另外,組件類智能包括有一個(gè)頂層標(biāo)簽,否則會(huì)報(bào)錯(cuò)。

組件的用法和原生的HTML標(biāo)簽完全一致,可以加入任意屬性。比如:<Hello name='張三' />,就是Hello 組件加入一個(gè)name屬性,值為張三。組件的屬性可以在組件類的this.props 對(duì)象上獲取,比如name屬性可以通過 this.props.name 讀取。

添加組件屬性,有一個(gè)地方需要注意,就是class屬性要寫成className,for屬性要寫成htmlFor,這是因?yàn)閏lass和for是JavaScript的保留字

五、this.props.children

this.props對(duì)象的屬性與組件的屬性一一對(duì)應(yīng),但是有一個(gè)例外,就是this.props.children 屬性。它表示組件的所有子節(jié)點(diǎn)。

var Hello = React.createClass({
         render:function(){
             return <h1> 生前何必久睡,死后必定長(zhǎng)眠{React.Children.map(this.props.children,function(v){return <div>{v}</div>})}</h1>;
         }
     });
     ReactDOM.render(
         <Hello>
             <span>天王蓋地虎</span>
             <span>寶塔鎮(zhèn)河妖</span>
         </Hello>,
         document.getElementById("app")
     )

效果如下:


childrens
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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