欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年04月12日 10:10:42   作者:Kindem  
本篇文章主要介紹了React props和state屬性的具體使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在上一節(jié)中,我們講到了React組件,說(shuō)了如何使用ES6類創(chuàng)建一個(gè)React組件并在其他的地方使用它。這一節(jié)我們將講到React組件的兩大靈魂——props和state。

props

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

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

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

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

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

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

在調(diào)用React組件的時(shí)候,我們可以像上面一樣向組件傳遞一些常量,以便組件在內(nèi)部調(diào)用。而調(diào)用的方法,就像下面這樣:

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')
);

在組件內(nèi)部獲取傳遞過(guò)來(lái)的props,只需要使用this.props對(duì)象即可,但是在使用之前,記得復(fù)寫組件的構(gòu)造函數(shù),并且接受props的值以調(diào)用父類構(gòu)造。

當(dāng)然,props也能夠設(shè)置默認(rèn)值,向下面這樣:

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類中聲明一個(gè)static的props默認(rèn)值即可,運(yùn)行效果和上面一樣。

props沒(méi)有多復(fù)雜,稍微練習(xí)即可習(xí)得。

state、組件生命周期

你可能回想,如果我想在React組件中添加動(dòng)態(tài)效果怎么辦?目前學(xué)過(guò)的知識(shí)好像無(wú)法解決這一問(wèn)題。

這一問(wèn)題需要使用React組件的state來(lái)解決,state即狀態(tài)的意思,在React中,所有會(huì)變化的控制變量都應(yīng)該放入state,每當(dāng)state中的內(nèi)容變化時(shí),頁(yè)面的相應(yīng)組件將會(huì)被重新渲染,另外,state完全是組件內(nèi)部的東西,外部無(wú)法向內(nèi)部傳遞state,也無(wú)法直接改變state的值。

先來(lái)舉一個(gè)例子:

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() {
    // 計(jì)算新時(shí)間
    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;

    // 設(shè)置新?tīng)顟B(tài)
    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')
);

這樣就完成了一個(gè)計(jì)數(shù)器,數(shù)值一秒鐘變化一次,來(lái)講解一下代碼:首先,state的初始化是在構(gòu)造函數(shù)中,像這樣:

constructor(props) {
  super(props);

  // 在這初始化state
  this.state = {
    ...
  }
}

而改變state是使用React組件基類中的一個(gè)自帶函數(shù):

this.setState({
  ...
});

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

另外,這里使用到了兩個(gè)React組件的生命周期回調(diào):

componentDidMount() {
  // React組件被加載到dom中的時(shí)候被調(diào)用
  ...
}

componentWillUnmount() {
  // React組件從dom中卸載的時(shí)候被調(diào)用
  ...
}

所以這樣一下上面的計(jì)時(shí)器代碼應(yīng)該就不是什么難事了,在React組件被加載到dom中的時(shí)候設(shè)置一個(gè)計(jì)時(shí)器,每秒鐘更新一次state,state更新的同時(shí)頁(yè)面中的組件將會(huì)被重新渲染,而當(dāng)組件被卸載的時(shí)候,則需要清除定時(shí)器,就那么簡(jiǎn)單。

不過(guò)React對(duì)于state的更新頻率,有一個(gè)最大的限度,超過(guò)這個(gè)限度則會(huì)導(dǎo)致頁(yè)面渲染的性能下降,大家需要注意不要在高頻函數(shù)中使用setState。

這一節(jié)React輕松入門就到這了,下一節(jié),我將會(huì)為大家介紹React組件的事件處理。如果覺(jué)得文章有幫助,請(qǐng)關(guān)注我,我會(huì)持續(xù)更新,為大家獻(xiàn)上更好更優(yōu)質(zhì)的文章!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet)的示例代碼

    reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet)的示例代碼

    這篇文章主要介紹了reset.css瀏覽器默認(rèn)樣式表重置(user?agent?stylesheet),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-12-12
  • React 高階組件HOC用法歸納

    React 高階組件HOC用法歸納

    高階組件就是接受一個(gè)組件作為參數(shù)并返回一個(gè)新組件(功能增強(qiáng)的組件)的函數(shù)。這里需要注意高階組件是一個(gè)函數(shù),并不是組件,這一點(diǎn)一定要注意,本文給大家分享React 高階組件HOC使用小結(jié),一起看看吧
    2021-06-06
  • React中使用TS完成父組件調(diào)用子組件的操作方法

    React中使用TS完成父組件調(diào)用子組件的操作方法

    由于在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們往往時(shí)需要調(diào)用子組件中的方法,這篇文章主要介紹了React中使用TS完成父組件調(diào)用子組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • React Native驗(yàn)證碼倒計(jì)時(shí)工具類分享

    React Native驗(yàn)證碼倒計(jì)時(shí)工具類分享

    這篇文章主要為大家分享了React Native驗(yàn)證碼倒計(jì)時(shí)工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • React如何接收excel文件下載導(dǎo)出功能封裝

    React如何接收excel文件下載導(dǎo)出功能封裝

    這篇文章主要介紹了React如何接收excel文件下載導(dǎo)出功能封裝,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的原理解析

    react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的原理解析

    這篇文章主要介紹了react 實(shí)現(xiàn)圖片正在加載中 加載完成 加載失敗三個(gè)階段的,通過(guò)使用loading的圖片來(lái)占位,具體原理解析及實(shí)現(xiàn)代碼跟隨小編一起通過(guò)本文學(xué)習(xí)吧
    2021-05-05
  • react 不用插件實(shí)現(xiàn)數(shù)字滾動(dòng)的效果示例

    react 不用插件實(shí)現(xiàn)數(shù)字滾動(dòng)的效果示例

    這篇文章主要介紹了react 不用插件實(shí)現(xiàn)數(shù)字滾動(dòng)的效果示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • React組件傳children的方案總結(jié)

    React組件傳children的方案總結(jié)

    自定義組件的時(shí)候往往需要傳 children,由于寫法比較多樣,我就總結(jié)了一下,文中有詳細(xì)的總結(jié)內(nèi)容和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于React Native 無(wú)法鏈接模擬器的問(wèn)題

    關(guān)于React Native 無(wú)法鏈接模擬器的問(wèn)題

    許多朋友遇到React Native 無(wú)法鏈接模擬器的問(wèn)題,怎么解決呢,本文給大家分享完整簡(jiǎn)便解決方法及配置例題,對(duì)React Native 鏈接模擬器相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • React項(xiàng)目build打包頁(yè)面空白的解決方案

    React項(xiàng)目build打包頁(yè)面空白的解決方案

    React項(xiàng)目執(zhí)行build命令后,在本地服務(wù)器打開(kāi)頁(yè)面是空白的,本文主要介紹了React項(xiàng)目build打包頁(yè)面空白的解決方案,感興趣的可以了解一下
    2023-08-08

最新評(píng)論