初識(shí)react之基礎(chǔ)認(rèn)知

一、react簡(jiǎn)介

1、專(zhuān)注視圖層View,react并不是完整的MVC/MVVM框架,但可根據(jù)應(yīng)用場(chǎng)景自行選擇業(yè)務(wù)層框架,并根據(jù)需要搭配Flux、Redux、GraphQL/Relay來(lái)使用。 近幾年,前端解決方案也經(jīng)歷了 redux => dva => umi 的發(fā)展。

2、Virtual DOM提升性能,每次數(shù)據(jù)更新后,重新計(jì)算Virtual DOM,和上一次生成的做對(duì)比,對(duì)發(fā)生變化的部分做批量更新。shouldComponentUpdate生命周期回調(diào)減少數(shù)據(jù)變化后不必要的Virtual DOM對(duì)比過(guò)程,因?yàn)閷?duì)比DOM節(jié)點(diǎn)也是需要資源的,后面的文章里再介紹diff算法。

3、函數(shù)式編程與JSX語(yǔ)法是react的特點(diǎn),可用其構(gòu)建可復(fù)用的react組件。

二、react組件

1、react組件由三部分組成:屬性(props)、狀態(tài)(state)、生命周期方法。如下圖所示

react組件的組成

react組件可接收參數(shù),也可能有自身的狀態(tài),一旦其有所改變,react組件便執(zhí)行相應(yīng)的生命周期方法,最后渲染。

2、react組件構(gòu)建方法:三種構(gòu)建方法,React.createClass(不推薦)、ES6 classes和無(wú)狀態(tài)函數(shù)(stateless function)

React.createClass(不推薦)

用 React.createClass 構(gòu)建組件是 React 最傳統(tǒng)、也是兼容性最好的方法。在 0.14 版本發(fā)布之前,這一直都是 React 官方唯一指定的組件寫(xiě)法。示例代碼如下:

const Button = React.createClass({

    getDefaultProps() {
        return { color: 'blue', text: 'Confirm', };
    },

    render() {
        const { color, text } = this.props;
        return (
            <button className={`btn btn-${color}`}>
                <em>{text}</em>
            </button>
        );
    }

});

從表象上看,React.createClass 方法就是構(gòu)建一個(gè)組件對(duì)象。當(dāng)另一個(gè)組件需要調(diào)用 Button 組件時(shí),只用寫(xiě)成 <Button />,就可以被解析成 React.createElement(Button) 方法來(lái)創(chuàng)建 Button 實(shí)例,這意味著在一個(gè)應(yīng)用中調(diào)用幾次 Button,就會(huì)創(chuàng)建幾次 Button 實(shí)例。

ES6 classes

ES6 classes 的寫(xiě)法是通過(guò) ES6 標(biāo)準(zhǔn)的類(lèi)語(yǔ)法的方式來(lái)構(gòu)建方法:

import React, { Component } from 'react';

class Button extends Component {

    constructor(props) {
        super(props);
    } 

   static defaultProps = {
      color: 'blue',
      text: 'Confirm',
   };

   render() {
        const { color, text } = this.props;
        return (
            <button className={`btn btn-${color}`}>
                <em>{text}</em>
            </button>
        );
    }
}

這里的直觀(guān)感受是從調(diào)用內(nèi)部方法變成了用類(lèi)來(lái)實(shí)現(xiàn)。與 createClass 的結(jié)果相同的是,調(diào)用類(lèi)實(shí)現(xiàn)的組件會(huì)創(chuàng)建實(shí)例對(duì)象。

無(wú)狀態(tài)函數(shù)

使用無(wú)狀態(tài)函數(shù)構(gòu)建的組件稱(chēng)為無(wú)狀態(tài)組件,這種構(gòu)建方式是 0.14 版本之后新增的,且官方頗為推崇。示例代碼如下:


function Button({ color = 'blue', text = 'Confirm' }) {

    return (
        <button className={`btn btn-${color}`}>
            <em>{text}</em>
        </button>
    );

}

無(wú)狀態(tài)組件只傳入 props 和 context 兩個(gè)參數(shù);也就是說(shuō),它不存在 state,也沒(méi)有生命周期方法,組件本身即上面兩種 React 組件構(gòu)建方法中的 render 方法。不過(guò),像 propTypes 和 defaultProps 還是可以通過(guò)向方法設(shè)置靜態(tài)屬性來(lái)實(shí)現(xiàn)的。

在適合的情況下,我們都應(yīng)該且必須使用無(wú)狀態(tài)組件。無(wú)狀態(tài)組件不像上述兩種方法在調(diào)用時(shí)會(huì)創(chuàng)建新實(shí)例,它創(chuàng)建時(shí)始終保持了一個(gè)實(shí)例,避免了不必要的檢查和內(nèi)存分配,做到了內(nèi)部?jī)?yōu)化。

三、react數(shù)據(jù)流

1、state內(nèi)部狀態(tài),可用setState方法改變狀態(tài)值,此方法是異步方法。

2、props組件傳值,自頂向下單向傳遞

3、用 function prop 與父組件通信

handleClick(item) {
  // ...
  this.props.onChange({item});
}

下一篇我們來(lái)學(xué)習(xí)下react生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容