文章出處

ReactJS通常也被稱為"React",是一個剛剛在這場游戲中登場的新手。它由Facebook創建,并在2013年首次發布。Facebook認為React在處理SPA問題上可以成為Angular的替代品,因此如果你認為Angular和React這兩種框架是競爭對手,那你的理解就對了。不過,與Angular相比,React最大的不同之處在于,它是一個更高效、具有更高性能、速度更快的類庫。下圖展示了使用React、Angular、Knockout(另一種類庫,在本文中不做討論),以及純粹的JavaScript在DOM中渲染包含1000個內容的列表,各自所需的時間:

來源: The Dapper Developer

如果你的應用非常看重性能,那么React就是正確的選擇。也因此,在今年的2015 AngularJS研討會也有提及,兩者可以互相結合,讓整個網頁性能更提升一步。

有興趣者可以參考下面Demo Code:https://github.com/djsmith42/angular_react_directive_example

 

關于ReactJS .NET

它是專對.NET平臺開發者設計,讓我們不只可以在前端去Render出頁面,也可以在Server端去Render頁面。開發ReactJS可以用一般JS 庫,也可以通過類似XML的JSX編寫方式去開發。官方網站 http://reactjs.net/ ,已經可以支持ASP.NET 5 !

我們參照入門教程(http://reactjs.cn/react/docs/getting-started.html),首先我們創建一個空的ASP.NET MVC 4項目,可以通過Nuget去安裝ReactJS.NET組件:

創建第一個組件 CommentBox

@{

Layout = null;

}

<html>

<head>

<title>Hello React</title>

</head>

<body>

<div id="content"></div>

<script src="@Url.Content("~/Scripts/react.js")"></script>

<script src="@Url.Content("~/Scripts/Tutorial.jsx")"></script>

</body>

</html>

添加以下代碼到Tutorial.jsx

var CommentBox = React.createClass({

render: function() {

return (

<div className="commentBox">

Hello, world! I am a CommentBox.

</div>

);

}

});

React.render(

<CommentBox />,

document.getElementById('content')

);

把每個想要Render出來的界面當作組件來操作,上面就是一個組件的生成語法,其中組件就是commentBoxRenderContent之后,而建議作法是要將生成的對象的JSX文件,放在要呈現的Tag后面。

 

若是要綁定數據也可以這樣寫:

var CommentBox = React.createClass({

render: function() {

return (

<div className="commentBox">

<h1>Comments</h1>

<CommentList data={this.props.data} />

<br />

 

</div>

);

}

});

var data = [

{ Author: "Daniel Lo AAA", Text: "Hello ReactJS.NET World!" },

{ Author: "Pete Hunt BBB", Text: "This is one comment" },

{ Author: "Jordan Walke CCC", Text: "This is *another* comment" }

];

var CommentList = React.createClass({

render: function() {

var commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

});

return (

<div className="commentList">

{commentNodes}

</div>

);

}

});

 

var Comment = React.createClass({

render: function() {

 

return (

<div className="comment">

<h2 className="commentAuthor">

{this.props.author}

</h2>

{this.props.children}

</div>

);

}

});

 

React.render(

<CommentBox data={data}/>,

document.getElementById('content')

);

運行效果如下:

這一段主要是將data這個數據集放入Commentbox這個對象中,在Ccommentbox對象中又包含了Commentlist這個對象,所以,必須產生Commenlist這個對象,并在這對象里面處理數據,而在Commentlist中,每條數據的呈現定義,定義為:

var commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

最后,在由Comment產生對象,并在對象內定義每一條數據的樣式。就可以把每筆數據用List方式呈現出來了。而在使用JSX最重要一點,千萬要記得在文件最開頭要加入

/** @jsx React.DOM */

雖然,它是采用JSX方式編寫,但是最后還是會編譯成JS文件,若是沒有加入這一行,就不會有動作了,且必須在MVC的View中的<head>之后加入下面這一行

<script src="@Url.Content("~/Scripts/react.js")"></script>

若是要改用服務端拉取數據,就必須考慮到React State,網頁初始化時候并沒有數據,但是會先把網頁Render出來這時候再調用MVC的Controller取出數據,此時數據就會有所變更,進而去更新數據。

public ActionResult Reactjs()

{

IList<CommentModel> _comments = new List<CommentModel>

{

new CommentModel

{

Author = "Daniel Lo Nigro",

Text = "Hello ReactJS.NET World!"

},

new CommentModel

{

Author = "Pete Hunt",

Text = "This is one comment"

},

new CommentModel

{

Author = "Jordan Walke",

Text = "This is *another* comment"

},

};

 

return Json(_comments, JsonRequestBehavior.AllowGet);

 

}

 

JSX可以套用上面的Script去做部分修改,獲取數據地方改成GET Data,完整的代碼如下:

/** @jsx React.DOM */

 

var CommentBox = React.createClass({

    getInitialState: function() {

return {data: []};

},

componentWillMount: function() {

var xhr = new XMLHttpRequest();

xhr.open('get', this.props.url, true);

xhr.onload = function() {

var data = JSON.parse(xhr.responseText);

this.setState({ data: data });

}.bind(this);

xhr.send();

},

 

render: function() {

return (

<div className="commentBox">

<h1>Comments</h1>

<CommentList data={this.state.data} />

<br />

 

</div>

);

}

});

 

 

 

 

var CommentList = React.createClass({

render: function() {

var commentNodes = this.props.data.map(function (fff) {

return (

<Comment author={fff.Author}>

{fff.Text}

</Comment>

);

});

return (

<div className="commentList">

{commentNodes}

</div>

);

}

});

 

var Comment = React.createClass({

render: function() {

 

return (

<div className="comment">

<h2 className="commentAuthor">

{this.props.author}

</h2>

{this.props.children}

</div>

);

}

});

 

React.render(

<CommentBox url="/Home/Reactjs" />,

document.getElementById('content')

);

 

上面是簡要演示了使用ReactJS.NET, 進一步的請參考官方網站 http://reactjs.net/ 的文檔,后續繼續學習ReactJS。

示例代碼下載: http://files.cnblogs.com/files/shanyou/ReactDemo.zip

React 中文網

React 入門教程

顛覆式前端UI開發框架:React

深入淺出React(一):React的設計哲學 - 簡單之美

React Native探索(一):背景、規劃和風險


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()