亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

React中創(chuàng)建組件的方式

學(xué)習(xí)React也有一段時間了,雖然天天都在圍繞著組件打轉(zhuǎn)轉(zhuǎn),但在React中怎么構(gòu)建組件呢并沒有去深入的了解。愛掏網(wǎng) - it200.com事實上呢?在React中的組件還是有些復(fù)雜的,從概念上來說就不簡單。愛掏網(wǎng) - it200.com比如說,類組件函數(shù)組件無狀態(tài)組件高階組件等。愛掏網(wǎng) - it200.com另外創(chuàng)建組件的方式也有所不同,比如最早使用React.createClass來創(chuàng)建組件,有了ES6之后使用extends React.Component(借助ES6的class特性)創(chuàng)建組件,而今天又流行使用函數(shù)(Hooks)方式來創(chuàng)建組件。愛掏網(wǎng) - it200.com那么他們之間如何創(chuàng)建組件,又有何區(qū)別呢?在這篇文章中我們就先來學(xué)習(xí)和探討在React中如何創(chuàng)建組件。愛掏網(wǎng) - it200.com

先來看React.createClass如何創(chuàng)建組件?

如果你一直以來都在使用React的話,那么對React.createClass這個API并不陌生。愛掏網(wǎng) - it200.com在React中,最初就是用這個API來創(chuàng)建React組件。愛掏網(wǎng) - it200.com將描述組件的所有信息都將作為對象傳遞給createClass愛掏網(wǎng) - it200.com

createClass方法為開發(fā)人員提供了一個工廠方法(Factory Method),可以在不使用JavaScript 類的情況下創(chuàng)建React類組件。愛掏網(wǎng) - it200.com這是在ES之前創(chuàng)建React組件方法之一,因為在ES5中沒有可用的類語法:

const App = React.createClass({
    getInitialState: function() {
        return {
            value: '大漠'
        }
    }

    onChange: function(e) {
        this.setState({
            value: e.target.value
        })
    }

    render: function() {
        return (
            
                

使用 React.createClass 創(chuàng)建組件

Hello, {this.state.value} (^_^)!

) } }) const rootElement = document.getElementById("app"); ReactDOM.render(, rootElement);

createClass()方法接受一個對象,該對象為React組件定義方法。愛掏網(wǎng) - it200.comgetInitialState()函數(shù)用于為React組件設(shè)置初始狀態(tài),強制使用render()方法在JSX中用于輸出;額外的方法(比如onChange)是通過向?qū)ο髠鬟f更多的函數(shù)而添加的。愛掏網(wǎng) - it200.com

React中的生命周期也是可用的。愛掏網(wǎng) - it200.com例如,為了每次將值從input中輸入存到瀏覽器的本地存儲中(localStorage),我們可以使用componentDidUpdate()生命周期,該方法是將一個函數(shù)傳遞給對象,對象鍵以React的生命周期方法命名。愛掏網(wǎng) - it200.com此外,當組件接收到初始狀態(tài)時,可以從本地存儲中讀取該值:

const App = React.createClass({
    getInitialState: function() {
        return {
            value: localStorage.getItem('userName') || '@大漠'
        }
    },
    componentDidUpdate: function(){
        localStorage.setItem('userName', this.state.value)
    },
    onChange: function(e) {
        this.setState({
            value: e.target.value
        })
    },
    render: function() {
        return (
            
                

使用React.createClass創(chuàng)建組件

Hello, {this.state.value} (^_^)!

) } }) const rootElement = document.getElementById("app"); ReactDOM.render(, rootElement);

這個示例具有本地存儲的功能,每當重新加載或刷新瀏覽器時,當組件第一次掛載時,應(yīng)該會顯示之前在input中輸入的本地存儲的初始狀態(tài)。愛掏網(wǎng) - it200.com

React Mixins

React中引入了React Mixins,作為React的第一個可重用組件邏輯,這是一種高級模式。愛掏網(wǎng) - it200.com使用Mixin,可以將React組件的邏輯提取出來成為一個獨立對象愛掏網(wǎng) - it200.com當在組件中使用Mixin時,所有來自Mixin的特性都被引入組件:

var localStorageMixin = {
    getInitialState: function(){
        return {
            value: localStorage.getItem('userName') || '@大漠'
        }
    },
    setLocalStorage: function(val) {
        localStorage.setItem('userName', val)
    }
}

var App = React.createClass({
    mixins: [localStorageMixin],
    componentDidUpdate: function(){
        this.setLocalStorage(this.state.value)
    },
    onChange: function(e) {
        this.setState({
            value: e.target.value
        })
    },
    render() {
        return (
            
                

使用React Mixin和createClass創(chuàng)建組件

Hello, {this.state.value} (^_^)!!!

) } }) const rootElement = document.getElementById("app"); ReactDOM.render(, rootElement);

本例中,Mixin提供從本地存儲中讀取組件的初始狀態(tài),并使用setLocalStorage()方法擴展組件,該方法稍后將在實際組件中使用。愛掏網(wǎng) - it200.com為了使用Mixin更加靈活,我們可以使用一個函數(shù)來返回一個對象:

function getLocalStorageMixin(localStorageKey) {
    return {
        getInitialState: function(){
            return {
                value: localStoragee.getItem(localStorageKey) || ''
            }
        },
        setLocalStorage: function(value) {
            localStorage.setItem(localStorageKey, value)
        }
    }
}

var App = React.createClass({
    mixins: [getLocalStorageMixin('userName')],
    // ...
})

createClass()是創(chuàng)建React組件的一種簡單而有效的方法。愛掏網(wǎng) - it200.comReact最初使用createClass API的原因是,當時JavaScript沒有內(nèi)置的class愛掏網(wǎng) - it200.com當然,這種情況最終改變了。愛掏網(wǎng) - it200.comES6開始引入了class這個關(guān)鍵字,也可以使用類來創(chuàng)建組件。愛掏網(wǎng) - it200.com這讓React進入了一個兩難的境地,要么繼續(xù)使用createClass,要么跟進ES6,使用class來創(chuàng)建組件愛掏網(wǎng) - it200.com事實證明,React選擇了后者。愛掏網(wǎng) - it200.com

React v3.13.0版本引入了React.Component API,允許你使用JavaScript的類(class)來創(chuàng)建React組件。愛掏網(wǎng) - it200.com在React中使用class創(chuàng)建的組件常常被稱為React 類組件愛掏網(wǎng) - it200.com

我們可以使用React.Component來重構(gòu)上面使用React.createClass()方法創(chuàng)建的組件。愛掏網(wǎng) - it200.com

class App extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            value: localStorage.getItem('userName') || '@大漠'
        }
        this.onChange = this.onChange.bind(this)
    }

    componentDidUpdate() {
        localStorage.setItem('userName', this.state.value)
    }

    onChange(e) {
        this.setState({
            value: e.target.value
        })
    }

    render() {
        return (
            
                

使用ES6 Class創(chuàng)建組件(React.Component)

Hello, {this.state.value} (^_^)!!!

) } } const rootElement = document.getElementById("app"); ReactDOM.render(, rootElement);

使用JavaScript類編寫React組件帶有類構(gòu)造函數(shù)constructor()(主要用于React中設(shè)置初始狀態(tài)或綁定方法)和render()方法。愛掏網(wǎng) - it200.comReact組件內(nèi)部所有邏輯都來自于React.Component愛掏網(wǎng) - it200.com通過類組件中使用面向?qū)ο罄^承的組件。愛掏網(wǎng) - it200.com但是,不建議在更多的地方使用繼承這個概念。愛掏網(wǎng) - it200.com相反,建議使用組合而不是繼承愛掏網(wǎng) - it200.com

在React中使用React.Component創(chuàng)建組件,有幾個重要的概念需要掌握。愛掏網(wǎng) - it200.com

構(gòu)造函數(shù) constructor()

使用類組件,可以在構(gòu)造函數(shù)constructor()內(nèi)部將組件的狀態(tài)初始化為實例(this)上的狀態(tài)屬性。愛掏網(wǎng) - it200.com但是,根據(jù)ECMAScript規(guī)范,如果要擴展子類(即React.Component),必須要先調(diào)用super(),然后才能使用this愛掏網(wǎng) - it200.com具體來說,在使用React時,還必須記住將props傳遞給super()

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

自動綁定

當使用React.createClass創(chuàng)建組件時,React會自動將所有方法綁定到組件的實例(this愛掏網(wǎng) - it200.comReact.Component并非如此,很多開發(fā)人員都意識到他們不知道this關(guān)鍵字是如何工作的。愛掏網(wǎng) - it200.com因為必須記住類構(gòu)造函數(shù)中的.bind()方法(即.bind(this)愛掏網(wǎng) - it200.com如果不這樣做的話,瀏覽器會報“無法讀取未定義的setState屬性”錯誤。愛掏網(wǎng) - it200.com

class App extends React.Component {
    constructor(props) {
        super(props)
        //...
        this.onChange = this.onChange.bind(this)
    }
    // ...
}

類字段(Class Fields)

類字段允許我們直接將實例屬性作為屬性添加到類上,而無需使用構(gòu)造函數(shù)。愛掏網(wǎng) - it200.com這樣一來,我們就不再需要使用構(gòu)造函數(shù)來設(shè)置組件的初始狀態(tài),也不再需要在構(gòu)造函數(shù)中使用.bind(this),因為我們可以使用箭頭函數(shù)。愛掏網(wǎng) - it200.com

class App extends React.Component {
    state = {
        value: localStorage.getItem('userName') || '@w3cplus'
    }

    componentDidUpdate() {
        localStorage.setItem('userName', this.state.value)
    }

    onChange = (e) => {
        this.setState({
            value: e.target.value
        })
    }

    render () {
        const {value} = this.state

        return (
            
                

使用React.Component創(chuàng)建組件(Class Fields)

Hello, {value} (^_^)!!!

) } } const rootElement = document.getElementById("app"); ReactDOM.render(, rootElement);
已支付,使用閱讀碼 * 請輸入閱讀碼(忘記閱讀碼?)

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論0 條評論)
暫無評論

返回頂部

亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

    
    

    9000px;">

      
      

      国产麻豆欧美日韩一区| 亚洲综合免费观看高清完整版在线 | 午夜欧美2019年伦理| 国产视频在线观看一区二区三区 | 国产精品久久久久久久久晋中| 在线电影一区二区三区| 97久久精品人人澡人人爽| 经典一区二区三区| 亚洲高清视频的网址| 一区在线观看视频| 国产女同互慰高潮91漫画| 欧美老年两性高潮| 在线观看一区二区精品视频| 国产成人丝袜美腿| 国产裸体歌舞团一区二区| 日韩精品三区四区| 一区二区三区免费| 一区二区欧美精品| 亚洲欧美日韩国产中文在线| 国产精品视频一二| 国产精品你懂的在线| 中文字幕不卡在线播放| 欧美电影影音先锋| 欧美高清www午色夜在线视频| 欧美亚洲国产一区二区三区va | 久久婷婷色综合| 精品久久国产字幕高潮| 欧美一级夜夜爽| 91麻豆精品国产91久久久久| 欧美巨大另类极品videosbest| 国产成人精品免费在线| 国产91精品在线观看| 成人午夜精品在线| 色综合天天综合网天天狠天天| 91麻豆免费看片| 成人精品gif动图一区| 不卡视频一二三| 91亚洲永久精品| 欧美亚洲另类激情小说| 制服.丝袜.亚洲.另类.中文| 7878成人国产在线观看| www国产精品av| 国产精品欧美久久久久无广告| 国产精品理伦片| 亚洲二区在线视频| 精品在线播放免费| 国产麻豆9l精品三级站| 9人人澡人人爽人人精品| 色综合久久中文字幕综合网| 91浏览器在线视频| 色婷婷激情一区二区三区| 欧美色窝79yyyycom| 精品成人一区二区三区| xfplay精品久久| 中文字幕在线一区免费| 亚洲成人在线网站| 免费久久99精品国产| 成人毛片视频在线观看| 欧美网站一区二区| 国产拍揄自揄精品视频麻豆| 亚洲日本韩国一区| 亚洲国产日日夜夜| 国产福利不卡视频| 5566中文字幕一区二区电影| 国产精品区一区二区三区| 性感美女久久精品| 99久久99久久精品免费观看| 欧美午夜精品一区二区蜜桃| 国产精品久久久久一区二区三区共 | 日韩一区二区免费在线观看| 一区二区三区四区视频精品免费 | 日本成人在线一区| 色综合久久综合中文综合网| 欧美一区三区二区| 日本一区二区成人| 美女视频黄免费的久久| 成人免费高清视频| 欧美精品一区二区三区蜜桃视频| 一区二区三区欧美在线观看| 91丨九色porny丨蝌蚪| 久久久精品影视| 琪琪久久久久日韩精品| 欧美一级夜夜爽| 亚洲二区在线视频| 91社区在线播放| 国产精品视频一二| 国产精品一品视频| 91精品国产综合久久久蜜臀图片| 中文字幕一区二| 成人av网址在线| 国产精品沙发午睡系列990531| 久久69国产一区二区蜜臀| 91免费国产视频网站| 日本一区二区免费在线 | 在线观看日韩国产| 亚洲日本va在线观看| 成人涩涩免费视频| 欧美一级日韩免费不卡| 日韩黄色一级片| 欧美一级理论性理论a| 午夜国产精品一区| 精品久久久久香蕉网| 伦理电影国产精品| 精品乱码亚洲一区二区不卡| 狠狠色丁香久久婷婷综合丁香| 欧美成人精品福利| 久久精品久久99精品久久| 99免费精品视频| 一区二区欧美国产| 欧美日韩国产不卡| 蜜桃视频在线观看一区| 久久综合九色综合欧美就去吻| 狠狠色丁香久久婷婷综合丁香| 欧美性受xxxx黑人xyx| 视频一区二区国产| 精品免费一区二区三区| 黄色资源网久久资源365| 国产精品黄色在线观看| 91麻豆精品国产91久久久| 成年人午夜久久久| 蜜桃久久久久久久| 亚洲一级片在线观看| 欧美国产精品中文字幕| 日韩一区二区免费在线电影| 一本色道**综合亚洲精品蜜桃冫| 日韩不卡免费视频| 樱桃视频在线观看一区| 欧美韩国日本综合| 91精品麻豆日日躁夜夜躁| 91性感美女视频| 大尺度一区二区| 激情久久久久久久久久久久久久久久| 亚洲欧美国产三级| 久久九九久久九九| 精品精品欲导航| 欧美久久婷婷综合色| 色国产综合视频| 99精品视频中文字幕| 国产精品夜夜爽| 国产乱码一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲高清不卡在线| 亚洲自拍偷拍欧美| 一区二区三区蜜桃| 一二三四区精品视频| 伊人一区二区三区| 樱桃国产成人精品视频| 亚洲精品国久久99热| 亚洲免费观看在线观看| 中文字幕一区不卡| 亚洲免费观看高清完整| 国产精品家庭影院| 最新热久久免费视频| 亚洲免费毛片网站| 一区二区三区在线不卡| 亚洲精品乱码久久久久| 亚洲综合999| 肉肉av福利一精品导航| 免费观看一级特黄欧美大片| 日韩电影一区二区三区四区| 日本午夜精品视频在线观看| 日本欧美在线观看| 免费成人在线观看| 国产中文字幕一区| 国产精品资源在线观看| 懂色av一区二区夜夜嗨| 不卡的av在线| 在线视频观看一区| 欧美日韩一二三区| 日韩女优毛片在线| 国产欧美中文在线| 一区二区三区欧美久久| 日韩电影在线看| 国产精品自拍在线| 色综合久久久久综合体桃花网| 欧美性xxxxxx少妇| 精品剧情v国产在线观看在线| 久久综合精品国产一区二区三区| 日本一区二区视频在线观看| 亚洲色图视频免费播放| 午夜精品久久一牛影视| 国产尤物一区二区在线| 91一区一区三区| 日韩欧美一级特黄在线播放| 久久精品人人做人人爽人人| 亚洲色大成网站www久久九九| 天天操天天综合网| 国产一区二区三区免费看| 99久久免费精品高清特色大片| 欧美色电影在线| 久久久www成人免费毛片麻豆 | 免费观看久久久4p| 93久久精品日日躁夜夜躁欧美| 91麻豆精品国产91久久久久久久久| 精品国产乱码91久久久久久网站| 国产精品麻豆欧美日韩ww| 亚洲成人1区2区| 成人午夜大片免费观看| 日韩视频免费观看高清完整版| 中文字幕一区二区在线观看|