1. 程式人生 > >React 10分鐘快速入門

React 10分鐘快速入門

一、簡介:

React 是一個用於構建使用者介面的 JAVASCRIPT 庫。

React主要用於構建UI,很多人認為 React 是 MVC 中的 V(檢視)。

React 起源於 Facebook 的內部專案,用來架設 Instagram 的網站,並於 2013 年 5 月開源。

React 擁有較高的效能,程式碼邏輯非常簡單,越來越多的人已開始關注和使用它。

1.1、React 特點

 1.宣告式設計 −React採用聲明範式,可以輕鬆描述應用。

 2.高效 −React通過對DOM的模擬,最大限度地減少與DOM的互動。

 3.靈活

 −React可以與已知的庫或框架很好地配合。

 4.JSX − JSX 是 JavaScript 語法的擴充套件。React 開發不一定使用 JSX ,但我們建議使用它。

 5.元件 − 通過 React 構建元件,使得程式碼更加容易得到複用,能夠很好的應用在大專案的開發中。

 6.單向響應的資料流 − React 實現了單向響應的資料流,從而減少了重複程式碼,這也是它為什麼比傳統資料繫結更簡單。

1.2、為什麼使用 React?

React 是一個 Facebook 和 Instagram 用來建立使用者介面的 JavaScript 庫。很人多認為 React 是 

MVC 中的 V(檢視)。

我們創造 React 是為了解決一個問題:構建隨著時間資料不斷變化的大規模應用程式。為了達到這個目標,React 採用下面兩個主要的思想。

簡單

僅僅只要表達出你的應用程式在任一個時間點應該長的樣子,然後當底層的資料變了,React 會自動處理所有使用者介面的更新。

宣告式 (Declarative)

資料變化後,React 概念上與點選“重新整理”按鈕類似,但僅會更新變化的部分。

構建可組合的元件

React 都是關於構建可複用的元件。事實上,通過 React 你唯一要做的事情就是構建元件。得益於其良好的封裝性,元件使程式碼複用、測試和關注分離(separation of concerns)更加簡單。

1.3、 React學習資源

React英文官網:https://reactjs.org/

React中文官網:https://react.docschina.org/

Github地址: https://github.com/facebook/react

極客學院:http://wiki.jikexueyuan.com/project/react/

菜鳥教程:http://www.runoob.com/react/react-tutorial.html

react.js 中文論壇:http://www.react-china.org

Webpack 和 React 小書 - gitbook:https://fakefish.github.io/react-webpack-cookbook/

1.4、AngularJS簡介

AngularJS是一個前端MVVM框架。

angular的英文字面意思是:有角的; 用角測量的

AngularJS是協助搭建單頁面工程(SPA)的開源前端框架。它通過MVC模式使得開發與測試變得更容易。

AngularJS試圖成為WEB應用中的一種端對端的解決方案。它將指導開發整個應用。

AngularJS於2009年釋出第一個版本,由Google進行維護,壓縮版94k。

1.3版後不再支援IE8
1.3版後不支援全域性控制器
2.0版 alpha

git倉庫: https://github.com/angular/

官網: https://www.angularjs.org/

http://www.angularjs.cn/中文社群

http://www.apjs.net/ 中文網

a web framework for modern web apps

1.5、Vue.js

Vue.js是一個輕巧、高效能、可元件化的MVVM庫,同時擁有非常容易上手的API,作者是尤雨溪是中國人。

官網: http://cn.vuejs.org/

倉庫: https://github.com/vuejs

易用
已經會了HTML,CSS,JavaScript?即刻閱讀指南開始構建應用!
靈活
簡單小巧的核心,漸進式技術棧,足以應付任何規模的應用。
效能
17kb min+gzip 執行大小、超快虛擬 DOM 、最省心的優化

當前三大前端MVC框架的對比:

1.6、React入門示例

獲取React

1、前往官網或者GitHub:http://react-cn.github.io/react/downloads.html

2、使用cdn

3、npm

npm install -g react-tools

1.6.1、宣告式渲染

示例:

<!DOCTYPE html>
<html>
<head>
    <title>Hello React!</title>
</head>
<body>
<div id="example"></div>

<script src="javascript/react.min.js"></script>
<script>
    React.render(
        //建立一個虛擬Dom
        React.createElement('h1', null, 'Hello, world!'),
        //把內容新增到example裡
        document.getElementById('example')
    );
</script>
</body>
</html>

結果:

 恭喜你,歡迎來到 React 的世界。

 1.6.2、一個簡單的元件

React 元件通過一個render()方法,接受輸入的引數並返回展示的物件。

以下這個例子使用了 JSX,它類似於XML的語法

輸入的引數通過render()傳入元件後,將儲存在this.props

 示例:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>一個簡單的元件</title>
</head>
<body>
<div id="showMessage"></div>

<script src="javascript/react.min.js"></script>
<script>
    var HelloMessage = React.createClass({displayName: "HelloMessage",
        render: function() {
            return React.createElement("div", null, "你好, ", this.props.name);
        }
    });

    React.render(React.createElement(HelloMessage, {name: "湯姆先生"}), showMessage);
</script>
</body>
</html>

 結果:

 1.6.3、一個有狀態的元件

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>時間旅行</title>
</head>
<body>
    <div id="timer"></div>

    <script src="javascript/react.min.js"></script>
    <script>
        var Timer = React.createClass({displayName: "Timer",
            getInitialState: function() {
                return {secondsElapsed: 0};
            },
            tick: function() {
                this.setState({secondsElapsed: this.state.secondsElapsed + 1});
            },
            componentDidMount: function() {
                this.interval = setInterval(this.tick, 1000);
            },
            componentWillUnmount: function() {
                clearInterval(this.interval);
            },
            render: function() {
                return (
                    React.createElement("div", null, "經過的秒數: ", this.state.secondsElapsed," 秒")
                );
            }
        });

        React.render(React.createElement(Timer, null), timer);
    </script>
</body>
</html>

結果: 時間旅行

 1.6.4、一個應用程式

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一個應用程式</title>
</head>
<body>
<div id="mountNode"></div>

<script src="javascript/react.min.js"></script>
<script>
    var TodoList = React.createClass({displayName: "TodoList",
        render: function() {
            var createItem = function(itemText) {
                return React.createElement("li", null, itemText);
            };
            return React.createElement("ul", null, this.props.items.map(createItem));
        }
    });
    var TodoApp = React.createClass({displayName: "TodoApp",
        getInitialState: function() {
            return {items: [], text: ''};
        },
        onChange: function(e) {
            this.setState({text: e.target.value});
        },
        handleSubmit: function(e) {
            e.preventDefault();
            var nextItems = this.state.items.concat([this.state.text]);
            var nextText = '';
            this.setState({items: nextItems, text: nextText});
        },
        render: function() {
            return (
                React.createElement("div", null,
                    React.createElement("h3", null, "TODO"),
                    React.createElement(TodoList, {items: this.state.items}),
                    React.createElement("form", {onSubmit: this.handleSubmit},
                        React.createElement("input", {onChange: this.onChange, value: this.state.text}),
                        React.createElement("button", null, 'Add #' + (this.state.items.length + 1))
                    )
                )
            );
        }
    });

    React.render(React.createElement(TodoApp, null), mountNode);
</script>
</body>
</html>

 結果:

TODO

1.6.5、一個使用外部外掛的元件

showdown.js下載:https://github.com/showdownjs/showdown

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>一個使用外部外掛的元件</title>
</head>
<body>
<div id="mountNode"></div>

<script src="javascript/jquery-1.11.3.min.js"></script>
<script src="javascript/react.min.js"></script>
<script src="javascript/showdown.js"></script>
<script>
    var converter = new showdown.Converter();

    var MarkdownEditor = React.createClass({displayName: "MarkdownEditor",
        getInitialState: function() {
            return {value: 'Type some *markdown* here!'};
        },
        handleChange: function() {
            this.setState({value: this.refs.textarea.getDOMNode().value});
        },
        render: function() {
            return (
                React.createElement("div", {className: "MarkdownEditor"},
                    React.createElement("h3", null, "Input"),
                    React.createElement("textarea", {
                        onChange: this.handleChange,
                        ref: "textarea",
                        defaultValue: this.state.value}),
                    React.createElement("h3", null, "Output"),
                    React.createElement("div", {
                        className: "content",
                        dangerouslySetInnerHTML: {
                            __html: converter.makeHtml(this.state.value)
                        }}
                    )
                )
            );
        }
    });

    React.render(React.createElement(MarkdownEditor, null), mountNode);
</script>
</body>
</html>

 結果:

markdown轉換編輯器

在此愉快的學習過程就結束啦,咋們下期再見!