初試react

    在使用react前簡單介紹一下react,以前常用jquery操作dom,開銷較大,使用react的虛擬dom可以減少開銷,另外react實現了功能模塊化,減少了前端數據處理邏輯與界面渲染邏輯的複雜性。在學習react之前需要學習ES6語法。另外react是可以後端渲染的,使用node.js實現後端渲染,使用前端渲染還是後端渲染根據實際需求來選擇,前端渲染速度較慢,但後端渲染會增加服務器壓力。

我先搭建環境運行第一個react程序如下:
(1)首頁index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>react</title>
</head>
<body>
<div id="root">

</div>
<script src="../src/js/jquery.min.js"></script>
<script src="../src/js/react.production.min.js"></script>
<script src="../src/js/react-dom.production.min.js"></script>
<script src="../src/js/redux.min.js"></script>
<script src="../src/js/react-redux.min.js"></script>
<script src="../src/js/babel.min.js"></script>

<script src="../src/index.js" type="text/babel"></script>
</body>
</html>

其他jquery、react、redux、babel自行下載即可
(2)index.js
 

class Clicks extends React.Component{
    constructor(props){
        super(props)   //js規定子類中若想使用this必須super(),繼承父類的,react中想要使用props的話,也必須繼承父類的props屬性
        //this.props = porps;  //如此方式會導致ReferenceError: "porps is not defined"   react-dom.production.min.js:117:150錯誤,應爲react-dom需要React.Component中的props,自定義的無法滿足條件
        this.a = 3;
        this.state = {val:1};
    }

    b = 5;  //聲明變量,指向都是this
    fnct = () =>{    //箭頭函數的this使用的是外部this,不用想其他函數一樣bind(this)
        alert(this.a+"   "+this.refs.tx.value+"  "+this.b+"  "+this.props.val.tr) //refs用於組件內部引用dom
        this.state.val ++;
        this.setState(this.state)
    }

    render(){
        return (<div>
            <input type="text" ref="tx" style={{width:100}} value={this.props.val.te} />
            <input type="text" style={{width:50}} value={this.state.val} />
            <button onClick={this.fnct}>click</button>
        </div>);
    }
}
ReactDOM.render(<Clicks val={{te: 123, tr:"tr"}} />, $("#root")[0]);

class ReduxTest extends React.Component{
    constructor(props) {
        super(props)
    }

    render(){
        return (<div>test</div>);
    }
}
ReactDOM.render(<ReduxTest/>,$("#example")[0])

//結構合併產生一個新值(不會改變原對象)
// let str = {a:1,b:2,c:3}
// let str2 = {c:1,d:4}
// console.log({...str,...str2})
//console.log(str)

要注意的是:
(1)使用ES6語法時,import導入其他js文件時需要使用type=“module”,不可以使用type="text\babel",此處存在衝突,可以使用webpack打包解決該問題。
(2)另外由於我react中使用了JSX,故需要使用babel。
(3)使用ReacDOM.render()渲染組件react組件需要使用首字母大寫,渲染html元素需要首字母小寫。
(4)reactDom使用style需要使用類似於style={{width:500}}表達式不可以使用style="width:500px"。
(5)class、for等html標識需要換成className、htmlfor,如className={class},自定義屬性需要以"data-"前綴開始。
(6)ref屬性可以方便在組件中對其他元素的引用this.refs.xxx即可。
(7)使用箭頭函數可以不需要再bind(this),箭頭函數直接使用的外部this。

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