• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    React props和state屬性的具體使用方法

    來源:懂視網 責編:小采 時間:2020-11-27 22:16:53
    文檔

    React props和state屬性的具體使用方法

    React props和state屬性的具體使用方法:在上一節中,我們講到了React組件,說了如何使用ES6類創建一個React組件并在其他的地方使用它。這一節我們將講到React組件的兩大靈魂——props和state。 props 不知道大家還記不記得xml標簽中的屬性,就像這樣: <class id=1>
    推薦度:
    導讀React props和state屬性的具體使用方法:在上一節中,我們講到了React組件,說了如何使用ES6類創建一個React組件并在其他的地方使用它。這一節我們將講到React組件的兩大靈魂——props和state。 props 不知道大家還記不記得xml標簽中的屬性,就像這樣: <class id=1>

    在上一節中,我們講到了React組件,說了如何使用ES6類創建一個React組件并在其他的地方使用它。這一節我們將講到React組件的兩大靈魂——props和state。

    props

    不知道大家還記不記得xml標簽中的屬性,就像這樣:

    <class id="1">
     <student id="1">John Kindem</student>
     <student id="2">Alick Ice</student>
    </class>
    

    這樣一個xml文件表達的意思是1班有兩個學生,學號為1的學生名字為John Kindem,學號為2的學生名字為Alick Ice,其中id就是屬性,你可以把它看做一個常量,它是只讀的。

    html繼承自xml,而JSX從莫種意義上又是html和js的擴展,屬性的概念自然得到了傳承。

    在React中,我們使用props這一概念向React組件傳遞只讀的值,就像這樣:

    // 假設我們已經自定義了一個叫Hello的組件
    ReactDom.render(
     <Hello firstName={'John'} lastName={'Kindem'}/>,
     document.getElementById('root')
    );
    

    在調用React組件的時候,我們可以像上面一樣向組件傳遞一些常量,以便組件在內部調用。而調用的方法,就像下面這樣:

    class Hello extends React.Component {
     constructor(props) {
     super(props);
     }
    
     render() {
     return (
     <div>
     <h1>Hello, {this.props.firstName + ' ' + this.props.lastName}</h1>
     </div>
     );
     }
    }
    
    ReactDom.render(
     <Hello firstName={'John'} lastName={'Kindem'}/>,
     document.getElementById('root')
    );
    
    

    在組件內部獲取傳遞過來的props,只需要使用this.props對象即可,但是在使用之前,記得復寫組件的構造函數,并且接受props的值以調用父類構造。

    當然,props也能夠設置默認值,向下面這樣:

    class Hello extends React.Component {
     constructor(props) {
     super(props);
     }
    
     static defaultProps = {
     firstName: 'John',
     lastName: 'Kindem'
     };
    
     render() {
     return (
     <div>
     <h1>Hello, {this.props.firstName + ' ' + this.props.lastName}</h1>
     </div>
     );
     }
    }
    
    ReactDom.render(
     <Hello/>,
     document.getElementById('root')
    );
    
    

    只需在ES6類中聲明一個static的props默認值即可,運行效果和上面一樣。

    props沒有多復雜,稍微練習即可習得。

    state、組件生命周期

    你可能回想,如果我想在React組件中添加動態效果怎么辦?目前學過的知識好像無法解決這一問題。

    這一問題需要使用React組件的state來解決,state即狀態的意思,在React中,所有會變化的控制變量都應該放入state,每當state中的內容變化時,頁面的相應組件將會被重新渲染,另外,state完全是組件內部的東西,外部無法向內部傳遞state,也無法直接改變state的值。

    先來舉一個例子:

    import React from 'react';
    import ReactDom from 'react-dom';
    
    class Time extends React.Component {
     constructor(props) {
     super(props);
    
     // 初始化state
     this.state = {
     hour: 0,
     minute: 0,
     second: 0
     }
     }
    
     componentDidMount() {
     this.interval = setInterval(() => this.tick(), 1000);
     }
    
     componentWillUnmount() {
     clearInterval(this.interval);
     }
    
     tick() {
     // 計算新時間
     let newSecond, newMinute, newHour;
     let carryMinute = 0, carryHour = 0;
     newSecond = this.state.second + 1;
     if (newSecond > 59) {
     carryMinute = 1;
     newSecond -= 60;
     }
     newMinute = this.state.minute + carryMinute;
     if (newMinute > 59) {
     carryHour = 1;
     newMinute -= 60;
     }
     newHour = this.state.hour + carryHour;
     if (newHour > 59) newHour -= 60;
    
     // 設置新狀態
     this.setState({
     hour: newHour,
     minute: newMinute,
     second: newSecond
     });
     }
    
     render() {
     return (
     <div>
     <h1>current time: {this.state.hour + ':' + this.state.minute + ':' + this.state.second}</h1>
     </div>
     );
     }
    }
    
    ReactDom.render(
     <Time/>,
     document.getElementById('root')
    );
    
    

    這樣就完成了一個計數器,數值一秒鐘變化一次,來講解一下代碼:首先,state的初始化是在構造函數中,像這樣:

    constructor(props) {
     super(props);
    
     // 在這初始化state
     this.state = {
     ...
     }
    }
    
    

    而改變state是使用React組件基類中的一個自帶函數:

    this.setState({
     ...
    });
    

    使用這個函數之前一定要注意this的作用域,箭頭函數中的this指向外部this,而普通函數中的this指向函數本身。

    另外,這里使用到了兩個React組件的生命周期回調:

    componentDidMount() {
     // React組件被加載到dom中的時候被調用
     ...
    }
    
    componentWillUnmount() {
     // React組件從dom中卸載的時候被調用
     ...
    }
    
    

    所以這樣一下上面的計時器代碼應該就不是什么難事了,在React組件被加載到dom中的時候設置一個計時器,每秒鐘更新一次state,state更新的同時頁面中的組件將會被重新渲染,而當組件被卸載的時候,則需要清除定時器,就那么簡單。

    不過React對于state的更新頻率,有一個最大的限度,超過這個限度則會導致頁面渲染的性能下降,大家需要注意不要在高頻函數中使用setState。

    這一節React輕松入門就到這了,下一節,我將會為大家介紹React組件的事件處理。如果覺得文章有幫助,請關注我,我會持續更新,為大家獻上更好更優質的文章!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    React props和state屬性的具體使用方法

    React props和state屬性的具體使用方法:在上一節中,我們講到了React組件,說了如何使用ES6類創建一個React組件并在其他的地方使用它。這一節我們將講到React組件的兩大靈魂——props和state。 props 不知道大家還記不記得xml標簽中的屬性,就像這樣: <class id=1>
    推薦度:
    標簽: 使用 的方法 rea
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 人妻精品久久久久中文字幕69| 亚洲国产精品成人久久| 无夜精品久久久久久| 四虎影院国产精品| 在线欧美v日韩v国产精品v| 国产精品亚洲专区无码WEB | 国产91久久精品一区二区| 国产精品影音先锋| 中文字幕精品一区影音先锋 | 日韩精品成人亚洲专区| 国产成人精品高清不卡在线| 久久精品亚洲福利| 中文字幕精品一区二区精品| 国产乱码精品一品二品| 中文字幕精品一区二区日本| 精品麻豆丝袜高跟鞋AV| 九九99精品久久久久久| 中文字幕无码久久精品青草| 国产精品福利区一区二区三区四区| 国产精品亚洲二区在线观看| 国产成人精品日本亚洲专一区| 人妻精品久久久久中文字幕69| 一区二区国产精品 | 99国产欧美精品久久久蜜芽| 91热成人精品国产免费| 99精品国产一区二区三区| 久久综合精品国产二区无码| 亚洲午夜国产精品无码老牛影视| 久久久国产精品| 精品国产福利盛宴在线观看| 色偷偷88888欧美精品久久久| 久久这里只有精品久久| 久久中文精品无码中文字幕 | 国产AV午夜精品一区二区三区| 爽爽精品dvd蜜桃成熟时电影院| 亚洲精品尤物yw在线影院| 四虎精品亚洲一区二区三区| 欧美日韩精品在线观看| 国语自产拍精品香蕉在线播放| 国产精品美女久久久久| 国产精品毛片一区二区三区 |