react學習與簡介

來源:互聯網
上載者:User

標籤:

簡介:

React是Facebook開發的一款JS庫

React解決了什麼問題?

1)、首先是以往mvc模式的缺陷,當程式碼程式庫龐大時,mvc非常的複雜,每添加新的功能,項目的複雜度就幾何倍的增長,導致代碼的維護性很差,所以mvc不合適太大型的前端應用。

2)模型和視圖間可能存在的雙向資料流動

React的特點是什嗎?

1)簡單

2)聲明式

另外在react官網上面(http://facebook.github.io/react/blog/2013/06/05/why-react.html),還可以瞭解到有這些特點:

1)React不是一個MVC架構

2)React不使用模板

3)響應式更新非常簡單

4)HTML僅僅是個開始

React主要的原理

1)virtual dom 虛擬dom

2)Components 組件

3)State 和 Render

just demo:

<!DOCTYPE html><html>  <head>    <script src="http://fb.me/react-0.12.1.js"></script>    <script src="http://fb.me/JSXTransformer-0.12.1.js"></script>  </head>  <body>    <div id="example"></div>    <script type="text/jsx">      React.render(        <h1>Hello, world!</h1>,        document.getElementById(‘example‘)      );    </script>  </body></html>
View Code

just demo:

<html>    <head>        <title>Hello React</title>        <script src="http://fb.me/react-0.12.1.js"></script>        <script src="http://fb.me/JSXTransformer-0.12.1.js"></script>        <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>        <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script>        <style>        #content{            width: 800px;            margin: 0 auto;            padding: 5px 10px;            background-color:#eee;        }        .commentBox h1{            background-color: #bbb;        }        .commentList{            border: 1px solid yellow;            padding:10px;        }        .commentList .comment{            border: 1px solid #bbb;            padding-left: 10px;            margin-bottom:10px;        }        .commentList .commentAuthor{            font-size: 20px;        }        .commentForm{            margin-top: 20px;            border: 1px solid red;            padding:10px;        }        .commentForm textarea{            width:100%;            height:50px;            margin:10px 0 10px 2px;        }        </style>    </head>    <body>        <div id="content"></div>        <script type="text/jsx">        var staticData = [            {author: "張飛", text: "我在寫一條評論~!"},            {author: "關羽", text: "2貨,都知道你在寫的是一條評論。。"},            {author: "劉備", text: "哎,咋跟這倆逗逼結拜了!"}        ];        var converter = new Showdown.converter();//markdown        /** 組件結構:            <CommentBox>                <CommentList>                    <Comment />                </CommentList>                <CommentForm />            </CommentBox>        */        //評論內容組件        var Comment = React.createClass({            render: function (){                var rawMarkup = converter.makeHtml(this.props.children.toString());                return (                    <div className="comment">                        <h2 className="commentAuthor">                            {this.props.author}:                        </h2>                        <span dangerouslySetInnerHTML={{__html: rawMarkup}} />                    </div>                );            }        });        //評論列表組件        var CommentList = React.createClass({            render: function (){                var commentNodes = this.props.data.map(function (comment){                    return (                        <Comment author={comment.author}>                            {comment.text}                        </Comment>                    );                });                return (                    <div className="commentList">                        {commentNodes}                    </div>                );            }        });        //評論表單組件        var CommentForm = React.createClass({            handleSubmit: function (e){                e.preventDefault();                var author = this.refs.author.getDOMNode().value.trim();                var text = this.refs.text.getDOMNode().value.trim();                if(!author || !text){                    return;                }                this.props.onCommentSubmit({author: author, text: text});                this.refs.author.getDOMNode().value = ‘‘;                this.refs.text.getDOMNode().value = ‘‘;                return;            },            render: function (){                return (                    <form className="commentForm" onSubmit={this.handleSubmit}>                        <input type="text" placeholder="Your name" ref="author" /><br/>                        <textarea type="text" placeholder="Say something..." ref="text" ></textarea><br/>                        <input type="submit" value="Post" />                    </form>                );            }        });        //評論塊組件        var CommentBox = React.createClass({            loadCommentsFromServer: function (){                this.setState({data: staticData});                /*                方便起見,這裡就不走服務端了,可以自己嘗試                $.ajax({                    url: this.props.url + "?_t=" + new Date().valueOf(),                    dataType: ‘json‘,                    success: function (data){                        this.setState({data: data});                    }.bind(this),                    error: function (xhr, status, err){                        console.error(this.props.url, status, err.toString());                    }.bind(this)                });                */            },            handleCommentSubmit: function (comment){                //TODO: submit to the server and refresh the list                var comments = this.state.data;                var newComments = comments.concat([comment]);                //這裡也不向後端提交了                staticData = newComments;                this.setState({data: newComments});            },            //初始化 相當於建構函式            getInitialState: function (){                return {data: []};            },            //組件添加的時候運行            componentDidMount: function (){                this.loadCommentsFromServer();                this.interval = setInterval(this.loadCommentsFromServer, this.props.pollInterval);            },            //組件刪除的時候運行            componentWillUnmount: function() {                clearInterval(this.interval);            },            //調用setState或者父級組件重新渲染不同的props時才會重新調用            render: function (){                return (                    <div className="commentBox">                        <h1>Comments</h1>                        <CommentList data={this.state.data}/>                        <CommentForm onCommentSubmit={this.handleCommentSubmit} />                    </div>                );            }        });        //目前的目錄需要有comments.json檔案        //這裡定義屬性,如url、pollInterval,包含在props屬性中        React.render(            <CommentBox url="comments.json" pollInterval="2000" />,            document.getElementById("content")        );        </script>    </body></html>
View Code

和其他一些js架構相比,React怎樣,比如Backbone、Angular等。

1)react不是一個MVC,它是構建易於可重複調用的web組件,側重於UI, 也就是view層

2)React是單向的從資料到視圖的渲染,非雙向資料繫結

3)不直接操作dom對象,而是虛擬dom通過diff演算法以最小的步驟作用到真實的dom上。

4)不便於直接操作dom,大多數時間只是對virtual dom 進行編程

 

參考:

http://facebook.github.io/react/blog/2013/06/05/why-react.html

https://github.com/facebook/react

 

react學習與簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.