亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React中props和state屬性有什么用法

發布時間:2020-07-09 16:09:11 來源:億速云 閱讀:171 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關React中props和state屬性有什么用法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

本篇文章主要介紹了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 (
      <p>
        <h2>Hello, {this.props.firstName + ' ' + this.props.lastName}</h2>
      </p>
    );//歡迎加入前端全棧開發交流圈一起學習交流:864305860
  }//面向1-3年前端人員
}//幫助突破技術瓶頸,提升思維能力
 
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>
        <h2>Hello, {this.props.firstName + ' ' + this.props.lastName}</h2>
      </div>
    );//歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:864305860
  }//面向1-3年前端人員
}//幫助突破技術瓶頸,提升思維能力
 
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>
        <h2>current time: {this.state.hour + ':' + this.state.minute + ':' + this.state.second}</h2>
      </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中props和state屬性有什么用法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嫩江县| 隆子县| 巴青县| 昌图县| 怀安县| 和政县| 临颍县| 武宁县| 循化| 横山县| 石台县| 昌江| 图们市| 金秀| 盐亭县| 门源| 新密市| 东兰县| 大连市| 齐河县| 巴东县| 增城市| 安阳县| 隆昌县| 西昌市| 泸州市| 丹江口市| 岳阳市| 炎陵县| 静安区| 安义县| 喀什市| 乌兰县| 平远县| 临汾市| 兰州市| 广东省| 肥乡县| 泸州市| 香格里拉县| 苏尼特左旗|