ReactJs基礎_1

1.JSX使得在模板插入js變量

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            //JSX 允許直接在模板插入 JavaScript 變量。如果這個變量是一個數組,則會展開這個數組的所有成員
            var arr = [ 
                <h1> Hellow, Pan </h1>,
                <h2> I like React very much! </h2>,
            ];
            ReactDOM.render(
                <div>{arr}</div>,
                document.getElementById('example')
            );
        </script>
    </body>
</html>

2.ReactDomTest

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            ReactDOM.render(
                <h1>Hello, world!</h1>,
                document.getElementById('example')
                );
        </script>
    </body>
</html>

3.使用JSX支持JS與HTML混用

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            var names = ['Shine', 'Pans', 'Panshang'];
            //jsx可以讓html和js混用, <>是html, {}是js
            ReactDOM.render(
                <div>
                {
                    names.map(function (name){
                        return <div> Hello, {name}!</div>
                    })
                }
                </div>,
                document.getElementById('example')
            );
        </script>
    </body>
</html>

4.創建組件

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
        //HelloMessage 是一個組件類。模板插入 <HelloMessage /> 時,會自動生成 HelloMessage 的一個實例
            var HelloMessage = React.createClass({
                render: function(){
                    return <h1>Hello, {this.props.name}</h1>;
                }
            });
            ReactDOM.render(
                <HelloMessage name = "Pan" />,
                document.getElementById('example')
            );
        </script>
    </body>
</html>

5.使用屬性 props

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
        //NoteList 組件有兩個 span 子節點,它們都可以通過 this.props.children 讀取
            var NotesList = React.createClass({
              render: function() {
                return (
                  <ol>
                  {
                    React.Children.map(this.props.children, function (child) {
                      return <li>{child}</li>;
                    })
                  }
                  </ol>
                );
              }
            });

            ReactDOM.render(
              <NotesList>
                <span>hello</span>
                <span>Pan! </span>
              </NotesList>,
              document.body
            );
        </script>
    </body>
</html>

6.PropsType

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            var MyTitle = React.createClass({
                //要求title的屬性的data類型是string,只能是string
                propTypes: {
                    title: React.PropTypes.string.isRequired,
                },

                render: function() {
                    return <h1> {this.props.title} </h1>;
                }
            });

            //測試部分, 將title屬性設置成 int類型, 然後會報錯
            //將123用引號包起來標示爲字符串類型將不在報錯
            var data = 123;

            ReactDOM.render(
                <MyTitle title = {data} />,
                document.body
                );
        </script>
    </body>
</html>

7.使用默認屬性 GetDefaultProps

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
        //獲取默認的屬性
        //獲取的是title的值
            var MyTitle = React.createClass({
              getDefaultProps : function () {
                return {
                  title : 'shinepans'
                };
              },

              render: function() {
                 return <h1> {this.props.title} </h1>;
               }
            });

            ReactDOM.render(
              <MyTitle />,
              document.body
            );
        </script>
    </body>
</html>

8.獲取真實dom

這裏寫圖片描述

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            var MyComponent = React.createClass({
                handleClick: function() {
                //監聽點擊事件, 聚焦輸入框
                this.refs.myTextInput.focus();
                },
                render: function() {
                    return (
                    <div>
                        <input type="text" ref="myTextInput" />
                        <input type="button" value="Focus the text input" onClick={this.handleClick} />
                    </div>
                        );
                    }
                });

            ReactDOM.render(
                <MyComponent />,
                document.getElementById('example')
            );
        </script>
    </body>
</html>

9.通過State改變狀態

這裏寫圖片描述

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8")> </meta>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            var LikeButton = React.createClass({
              getInitialState: function() {
                return {liked: false};
              },
              handleClick: function(event) {
                this.setState({liked: !this.state.liked});
              },
              //轉換狀態, 喜歡或不喜歡
              render: function() {
                var text = this.state.liked ? '喜歡了' : '還沒喜歡';
                return (
                  <p onClick={this.handleClick}>
                    你{text}這個.點擊文本改變你的狀態.
                  </p>
                );
              }
            });

            ReactDOM.render(
              <LikeButton />,
              document.getElementById('example')
            );
        </script>
    </body>
</html>

10.使用表單監聽,更好的用戶交互

這裏寫圖片描述

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8")> </meta>
        <script src="../build/react.js"></script>
        <script src="../build/react-dom.js"></script>
        <script src="../build/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
        //監聽textarea的變化, 變化了就更新p標籤裏的內容
        //下面初始化了 輸入框和p的初始值
            var Input = React.createClass({
              getInitialState: function() {
                return {value: '請在文本框輸入文本'};
              },
              handleChange: function(event) {
                this.setState({value: event.target.value});
              },
              render: function () {
                var value = this.state.value;
                return (
                  <div>
                    <textarea rows="10" cols="30" value={value} onChange={this.handleChange} />
                    <p>{value}</p>
                  </div>
                );
              }
            });

            ReactDOM.render(<Input/>, document.body);
        </script>
    </body>
</html>

11.使用JSBIn 直接在瀏覽器運行,調試JSX 很方便

令文字漸變效果, 使用了props, 計時器等, 源碼參考開始時給出的源代碼地址

這裏寫圖片描述

這裏寫圖片描述

———————SiteStart————————-

www.panshang.xyz

www.panshang.xyz

www.panshang.xyz

———————-SiteEnd————————

by: 潘尚

time: 2016.1.30

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章