亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

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

2024-05-06 16:43:43
字體:
來源:轉載
供稿:網友

在上一節中,我們講到了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組件的事件處理。如果覺得文章有幫助,請關注我,我會持續更新,為大家獻上更好更優質的文章!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清| 中文字幕日韩视频| 91免费看视频.| 精品国产成人av| 日韩成人小视频| 久久成人国产精品| 高清欧美电影在线| 国产精品久久久久久久久久小说| 欧美精品免费在线观看| 国产精品视频一区二区高潮| 欧美韩国理论所午夜片917电影| 久久久久久亚洲精品| 日韩亚洲欧美成人| 久久五月天色综合| 国产一区私人高清影院| 国外日韩电影在线观看| 亚洲精品资源在线| 性欧美暴力猛交69hd| 97成人在线视频| 尤物yw午夜国产精品视频| 国产精品扒开腿爽爽爽视频| 亚洲成av人影院在线观看| 亚州成人av在线| 亚洲精品视频中文字幕| 搡老女人一区二区三区视频tv| 影音先锋欧美精品| 日韩中文字幕在线观看| 欧美日韩国产丝袜美女| 国产精品美女久久| 国产91成人video| 亚洲大胆人体视频| 欧美午夜精品久久久久久人妖| 亚洲新声在线观看| 亚洲天堂免费视频| 亚洲xxx大片| 91黑丝在线观看| 亚洲国产91精品在线观看| 在线精品国产成人综合| 欧美电影免费观看网站| 国产精品第一区| 国产精品一区av| 日韩有码片在线观看| 欧美大尺度在线观看| 中文字幕精品久久久久| 日韩精品福利在线| 国产精品爱啪在线线免费观看| 2019亚洲日韩新视频| 日韩一区在线视频| 国模gogo一区二区大胆私拍| 日韩av免费观影| 成人免费看吃奶视频网站| 久久视频国产精品免费视频在线| 97久久超碰福利国产精品…| 亚洲精品一区二三区不卡| 一本色道久久88亚洲综合88| 1769国内精品视频在线播放| 亚洲精品视频播放| 亚洲精品v天堂中文字幕| 96pao国产成视频永久免费| 欧美精品www在线观看| 欧美夫妻性生活xx| 欧美一级大片视频| 国产热re99久久6国产精品| 成人国内精品久久久久一区| 日韩av不卡在线| 成人免费福利在线| 97香蕉久久夜色精品国产| 91亚洲一区精品| 亚洲二区中文字幕| 欧美猛交ⅹxxx乱大交视频| 欧洲一区二区视频| 国产一区二区三区在线看| 奇米成人av国产一区二区三区| 久色乳综合思思在线视频| 久久91亚洲人成电影网站| 国产亚洲欧美日韩精品| 亚洲天堂av在线免费观看| 亚洲精品久久久久久下一站| 国模极品一区二区三区| 超碰精品一区二区三区乱码| 中文字幕久精品免费视频| 国产精品视频网站| 国产亚洲欧洲黄色| 成人激情电影一区二区| 色哟哟网站入口亚洲精品| 欧美疯狂xxxx大交乱88av| 欧美国产日韩一区| 欧美久久久精品| 久久精品一区中文字幕| 亚洲国产精品美女| 国产日韩欧美夫妻视频在线观看| 青青草国产精品一区二区| 欧洲美女免费图片一区| 国产狼人综合免费视频| 中文字幕日本欧美| 性色av一区二区三区在线观看| 成人激情视频在线| 欧美日韩在线一区| 欧美激情影音先锋| 成人激情视频网| 欧美综合国产精品久久丁香| 日韩大片免费观看视频播放| 91九色综合久久| 国产精品电影一区| 国产成人精品久久久| 欧美国产极速在线| 日韩小视频网址| 久久亚洲精品网站| 亚洲性猛交xxxxwww| 亚洲夜晚福利在线观看| 国产精品视频男人的天堂| 色哟哟入口国产精品| 欧美成人在线免费视频| 欧美精品aaa| 亚洲视频一区二区| 日韩av在线一区| 欧美色图在线视频| 国产视频久久久久久久| 成人福利视频在线观看| 亚洲少妇中文在线| 亚洲自拍偷拍在线| 精品日韩视频在线观看| 久久久久久久久亚洲| 亚洲aaa激情| 136fldh精品导航福利| 91丨九色丨国产在线| 夜夜躁日日躁狠狠久久88av| 午夜精品一区二区三区在线播放| 6080yy精品一区二区三区| 日韩网站免费观看高清| 精品国产欧美一区二区三区成人| 亚洲激情中文字幕| 自拍偷拍亚洲在线| 欧美亚洲国产日韩2020| 成人黄色免费网站在线观看| 欧美性做爰毛片| 国产精品麻豆va在线播放| 日韩av免费在线看| 77777亚洲午夜久久多人| 91精品国产综合久久久久久蜜臀| 91亚洲精品视频| 午夜精品久久久久久99热| 麻豆国产va免费精品高清在线| 国产精品18久久久久久麻辣| 成人免费淫片aa视频免费| 亚洲美女免费精品视频在线观看| 亚洲欧美中文另类| 国产97在线|亚洲| 日韩成人激情视频| 亚洲性无码av在线| 最近2019年日本中文免费字幕| 久久久久久久久久国产精品| 97香蕉超级碰碰久久免费的优势| 亚洲天堂av在线播放| 欧美与黑人午夜性猛交久久久| 亚洲欧美日本精品| 黄色成人av在线| 成人黄色av播放免费| 欧美成人激情视频免费观看| 精品国产91久久久| 中文字幕日韩有码| 亚洲精品色婷婷福利天堂| 4k岛国日韩精品**专区| 亚洲精品在线91|