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

React中創建組件的方式

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

先來看React.createClass如何創建組件?

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

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

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

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

    render: function() {
        return (
            
                

使用 React.createClass 創建組件

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

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

createClass()方法接受一個對象,該對象為React組件定義方法。愛掏網 - it200.comgetInitialState()函數用于為React組件設置初始狀態,強制使用render()方法在JSX中用于輸出;額外的方法(比如onChange)是通過向對象傳遞更多的函數而添加的。愛掏網 - it200.com

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

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創建組件

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

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

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

React Mixins

React中引入了React Mixins,作為React的第一個可重用組件邏輯,這是一種高級模式。愛掏網 - it200.com使用Mixin,可以將React組件的邏輯提取出來成為一個獨立對象愛掏網 - 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創建組件

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

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

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

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

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

我們可以使用React.Component來重構上面使用React.createClass()方法創建的組件。愛掏網 - 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創建組件(React.Component)

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

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

使用JavaScript類編寫React組件帶有類構造函數constructor()(主要用于React中設置初始狀態或綁定方法)和render()方法。愛掏網 - it200.comReact組件內部所有邏輯都來自于React.Component愛掏網 - it200.com通過類組件中使用面向對象繼承的組件。愛掏網 - it200.com但是,不建議在更多的地方使用繼承這個概念。愛掏網 - it200.com相反,建議使用組合而不是繼承愛掏網 - it200.com

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

構造函數 constructor()

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

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

自動綁定

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

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

類字段(Class Fields)

類字段允許我們直接將實例屬性作為屬性添加到類上,而無需使用構造函數。愛掏網 - it200.com這樣一來,我們就不再需要使用構造函數來設置組件的初始狀態,也不再需要在構造函數中使用.bind(this),因為我們可以使用箭頭函數。愛掏網 - 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創建組件(Class Fields)

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

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

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

返回頂部

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

    
    

    9000px;">

      
      

      在线播放91灌醉迷j高跟美女| 91捆绑美女网站| 国产欧美日韩综合| 欧美日韩国产高清一区二区三区| 不卡视频在线看| 成人av在线网| 99久久精品免费观看| 成人免费看片app下载| 国产大陆a不卡| 成人激情开心网| 成人中文字幕在线| 春色校园综合激情亚洲| 成人免费视频免费观看| 99精品欧美一区| 色婷婷综合久久| 欧美性猛交xxxxxx富婆| 欧美电影一区二区| 精品久久久久久久人人人人传媒| 久久青草欧美一区二区三区| 国产精品伦一区| 亚洲一区二区视频在线| 老司机免费视频一区二区| 国产一区二区在线视频| 不卡免费追剧大全电视剧网站| 91捆绑美女网站| 欧美一区二区观看视频| 国产精品网站在线播放| 亚洲一区二区三区美女| 久久国产麻豆精品| 波多野结衣91| 在线不卡的av| 国产精品五月天| 日本女人一区二区三区| 国产不卡高清在线观看视频| 在线观看一区不卡| 欧美成va人片在线观看| 国产精品丝袜91| 性久久久久久久| 国产伦精品一区二区三区免费迷| 97精品视频在线观看自产线路二| 日韩视频国产视频| 综合久久给合久久狠狠狠97色 | 亚洲欧美日韩精品久久久久| 亚洲国产婷婷综合在线精品| 国产一区二区三区香蕉| 欧美综合亚洲图片综合区| 精品1区2区在线观看| 亚洲靠逼com| 国产伦精品一区二区三区免费迷| 色综合 综合色| 欧美精品一区在线观看| 午夜av电影一区| 99久久婷婷国产综合精品电影 | 欧美一区二区三区喷汁尤物| 国产精品久久久久久久久图文区| 日本一道高清亚洲日美韩| 成人综合婷婷国产精品久久 | 亚洲日本在线天堂| 国产一区二区伦理| 日韩精品一区二区三区中文精品| 一区二区久久久| 国产成人精品亚洲777人妖| 欧美一区二区三区的| 尤物av一区二区| av在线一区二区三区| 国产欧美精品一区二区三区四区 | 国产精品国产三级国产普通话三级 | 久久精品夜夜夜夜久久| 久色婷婷小香蕉久久| 在线电影一区二区三区| 日韩国产欧美在线观看| 欧美男同性恋视频网站| 亚洲一区二区三区四区在线| www.在线欧美| 国产精品高潮呻吟| 99精品欧美一区二区三区小说| 久久青草欧美一区二区三区| 久久精品国产久精国产| 精品久久久久久综合日本欧美| 免费成人你懂的| 久久综合久久综合久久| 国产又黄又大久久| 久久精品亚洲精品国产欧美kt∨| 国产一区二区三区不卡在线观看| 国产欧美精品一区aⅴ影院| 成人av网站在线观看| 亚洲欧美偷拍卡通变态| 欧美视频一二三区| 日本中文字幕一区二区视频| 日韩一区二区中文字幕| 九色综合国产一区二区三区| 久久久久青草大香线综合精品| 国产白丝精品91爽爽久久| 国产精品伦理在线| 欧美天天综合网| 日韩主播视频在线| 26uuu亚洲综合色| 成人黄色免费短视频| 亚洲最色的网站| 欧美一级高清大全免费观看| 国产美女主播视频一区| 国产精品久久久久久久浪潮网站| 欧美性大战久久久久久久| 极品瑜伽女神91| 亚洲天堂av一区| 欧美一区二区成人6969| 国产999精品久久| 艳妇臀荡乳欲伦亚洲一区| 67194成人在线观看| 国产白丝精品91爽爽久久| 亚洲黄色免费电影| 久久久精品人体av艺术| 欧美在线观看视频在线| 国产一二精品视频| 亚洲444eee在线观看| 国产日韩欧美电影| 7799精品视频| voyeur盗摄精品| 免费观看成人av| 一区二区三区在线高清| 精品国产91乱码一区二区三区 | 久久久综合视频| 一本色道a无线码一区v| 美女网站色91| 亚洲综合色区另类av| 精品国产伦理网| 欧美体内she精高潮| 国产aⅴ精品一区二区三区色成熟| 亚洲成人7777| 亚洲色图都市小说| 欧美国产日本韩| 91精品国产一区二区| 99久久精品国产导航| 久久av资源站| 日韩和欧美的一区| 一区二区三区在线视频播放| 国产夜色精品一区二区av| 日韩视频一区二区在线观看| 在线观看av不卡| 不卡高清视频专区| 国产一区二区看久久| 麻豆视频观看网址久久| 日韩精品亚洲专区| 一区二区三区日本| 一区二区三区四区不卡视频| 综合欧美亚洲日本| 国产精品成人免费| 国产精品国产精品国产专区不蜜 | 成人免费视频在线观看| 久久久久九九视频| 日韩欧美高清一区| 91精品国产黑色紧身裤美女| 欧美日韩一区二区三区四区五区| jizz一区二区| av午夜一区麻豆| 欧美一区二区三区在线视频 | 国产精品丝袜黑色高跟| 国产欧美日韩在线| 日本一区二区动态图| 国产网站一区二区| 久久精品人人做人人综合| 国产日韩欧美激情| 中文字幕乱码亚洲精品一区 | 日韩一区二区三区免费看 | 成人深夜视频在线观看| bt欧美亚洲午夜电影天堂| 99精品国产热久久91蜜凸| 成人aaaa免费全部观看| 91色porny蝌蚪| 欧美午夜视频网站| 欧美日韩一区久久| 日韩一区二区三区四区五区六区| 精品国产制服丝袜高跟| 国产亚洲精品7777| 一区二区在线看| 图片区小说区国产精品视频| 日韩成人精品在线观看| 国产九色精品成人porny| 成+人+亚洲+综合天堂| 日本道精品一区二区三区| 欧美精品v国产精品v日韩精品 | 日日夜夜免费精品| 老汉av免费一区二区三区| 国产一区二区三区黄视频| 高清av一区二区| 欧美挠脚心视频网站| 国产午夜精品久久久久久免费视| 成人欧美一区二区三区小说| 偷拍一区二区三区四区| 国产一区在线不卡| 91久久线看在观草草青青| 日韩欧美高清dvd碟片| 中文字幕一区在线观看| 日本网站在线观看一区二区三区 | 久久99精品久久只有精品| 国产风韵犹存在线视精品| 色猫猫国产区一区二在线视频| 51精品视频一区二区三区| 国产**成人网毛片九色 | 91精品国产综合久久香蕉麻豆|