欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

react中state和props有什么區(qū)別

這篇文章主要介紹了react中state和props有什么區(qū)別,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項目管理團(tuán)隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)站維護(hù)、成都西云數(shù)據(jù)中心解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球上千企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

區(qū)別:props是傳遞給組件的(類似于函數(shù)的形參),而state是在組件內(nèi)部被組件自己管理的(類似于在一個函數(shù)內(nèi)聲明的變量)。state是組件自己管理數(shù)據(jù),控制自己的狀態(tài),可變;props是外部傳入的數(shù)據(jù)參數(shù),不可變。

props

React的核心思想就是組件化思想,頁面會被切分成一些獨立的、可復(fù)用的組件。

組件從概念上看就是一個函數(shù),可以接受一個參數(shù)作為輸入值,這個參數(shù)就是props,所以可以把props理解為從外部傳入組件內(nèi)部的數(shù)據(jù)。由于React是單向數(shù)據(jù)流,所以props基本上也就是從服父級組件向子組件傳遞的數(shù)據(jù)。

用法

假設(shè)我們現(xiàn)在需要實現(xiàn)一個列表,根據(jù)React組件化思想,我們可以把列表中的行當(dāng)做一個組件,也就是有這樣兩個組件:<ItemList/><Item/>

先看看<ItemList/>

import Item from "./item";
export default class ItemList extends React.Component{
  const itemList = data.map(item => <Item item=item />);
  render(){
    return (
      {itemList}
    )
  }
}

列表的數(shù)據(jù)我們就暫時先假設(shè)是放在一個data變量中,然后通過map函數(shù)返回一個每一項都是<Item item='數(shù)據(jù)'/>的數(shù)組,也就是說這里其實包含了data.length<Item/>組件,數(shù)據(jù)通過在組件上自定義一個參數(shù)傳遞。當(dāng)然,這里想傳遞幾個自定義參數(shù)都可以。

<Item />中是這樣的:

export default class Item extends React.Component{
  render(){
    return (
      <li>{this.props.item}</li>
    )
  }
}

render函數(shù)中可以看出,組件內(nèi)部是使用this.props來獲取傳遞到該組件的所有數(shù)據(jù),它是一個對象,包含了所有你對這個組件的配置,現(xiàn)在只包含了一個item屬性,所以通過this.props.item來獲取即可。

只讀性

props經(jīng)常被用作渲染組件和初始化狀態(tài),當(dāng)一個組件被實例化之后,它的props是只讀的,不可改變的。如果props在渲染過程中可以被改變,會導(dǎo)致這個組件顯示的形態(tài)變得不可預(yù)測。只有通過父組件重新渲染的方式才可以把新的props傳入組件中。

默認(rèn)參數(shù)

在組件中,我們最好為props中的參數(shù)設(shè)置一個defaultProps,并且制定它的類型。比如,這樣:

Item.defaultProps = {
  item: 'Hello Props',
};

Item.propTypes = {
  item: PropTypes.string,
};

關(guān)于propTypes,可以聲明為以下幾種類型:

optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,

總結(jié)

props是一個從外部傳進(jìn)組件的參數(shù),主要作為就是從父組件向子組件傳遞數(shù)據(jù),它具有可讀性和不變性,只能通過外部組件主動傳入新的props來重新渲染子組件,否則子組件的props以及展現(xiàn)形式不會改變。

state

state是什么呢?

State is similar to props, but it is private and fully controlled by the component.

一個組件的顯示形態(tài)可以由數(shù)據(jù)狀態(tài)和外部參數(shù)所決定,外部參數(shù)也就是props,而數(shù)據(jù)狀態(tài)就是state

用法

export default class ItemList extends React.Component{
  constructor(){
    super();
    this.state = {
      itemList:'一些數(shù)據(jù)',
    }
  }
  render(){
    return (
      {this.state.itemList}
    )
  }
}

首先,在組件初始化的時候,通過this.state給組件設(shè)定一個初始的state,在第一次render的時候就會用這個數(shù)據(jù)來渲染組件。

setState

state不同于props的一點是,state是可以被改變的。不過,不可以直接通過this.state=的方式來修改,而需要通過this.setState()方法來修改state。

比如,我們經(jīng)常會通過異步操作來獲取數(shù)據(jù),我們需要在didMount階段來執(zhí)行異步操作:

componentDidMount(){
  fetch('url')
    .then(response => response.json())
    .then((data) => {
      this.setState({itemList:item});  
    }
}

當(dāng)數(shù)據(jù)獲取完成后,通過this.setState來修改數(shù)據(jù)狀態(tài)。

當(dāng)我們調(diào)用this.setState方法時,React會更新組件的數(shù)據(jù)狀態(tài)state,并且重新調(diào)用render方法,也就是會對組件進(jìn)行重新渲染。

注意:通過this.state=來初始化state,使用this.setState來修改state,constructor是唯一能夠初始化的地方。

setState接受一個對象或者函數(shù)作為第一個參數(shù),只需要傳入需要更新的部分即可,不需要傳入整個對象,比如:

export default class ItemList extends React.Component{
  constructor(){
    super();
    this.state = {
      name:'axuebin',
      age:25,
    }
  }
  componentDidMount(){
    this.setState({age:18})  
  }
}

在執(zhí)行完setState之后的state應(yīng)該是{name:'axuebin',age:18}。

setState還可以接受第二個參數(shù),它是一個函數(shù),會在setState調(diào)用完成并且組件開始重新渲染時被調(diào)用,可以用來監(jiān)聽渲染是否完成:

this.setState({
  name:'xb'
},()=>console.log('setState finished'))

總結(jié)

state的主要作用是用于組件保存、控制以及修改自己的狀態(tài),它只能在constructor中初始化,它算是組件的私有屬性,不可通過外部訪問和修改,只能通過組件內(nèi)部的this.setState來修改,修改state屬性會導(dǎo)致組件的重新渲染。

區(qū)別

  • props是傳遞給組件的(類似于函數(shù)的形參),而state是在組件內(nèi)部被組件自己管理的(類似于在一個函數(shù)內(nèi)聲明的變量)

  • state是組件自己管理數(shù)據(jù),控制自己的狀態(tài),可變;props是外部傳入的數(shù)據(jù)參數(shù),不可變;

  • 沒有state的叫做無狀態(tài)組件,有state的叫做有狀態(tài)組件;

  • 多用props,少用state。也就是多寫無狀態(tài)組件。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享react中state和props有什么區(qū)別內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

名稱欄目:react中state和props有什么區(qū)別
網(wǎng)頁URL:http://chinadenli.net/article20/ppsdjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、服務(wù)器托管、定制網(wǎng)站、企業(yè)網(wǎng)站制作、小程序開發(fā)、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
国产日韩欧美综合视频| 精品国产亚洲av久一区二区三区| 国产老女人性生活视频| 欧美精品久久一二三区| 老外那个很粗大做起来很爽| 欧美日韩在线第一页日韩| 国产欧美日韩在线一区二区| 国产精品亚洲一区二区| 日本精品视频一二三区| 狠狠做深爱婷婷久久综合| 高清一区二区三区大伊香蕉 | 国产视频在线一区二区| 在线免费视频你懂的观看| 免费在线观看欧美喷水黄片| 日韩国产中文在线视频| 欧美做爰猛烈叫床大尺度| 成人亚洲国产精品一区不卡 | 老富婆找帅哥按摩抠逼视频 | 在线日韩欧美国产自拍| 国产传媒免费观看视频| 九九热精品视频免费在线播放| 一区二区日本一区二区欧美| 亚洲天堂久久精品成人| 亚洲日本韩国一区二区三区| 久久精品中文扫妇内射| 深夜福利亚洲高清性感| 亚洲最新av在线观看| 日本在线视频播放91| 久久99亚洲小姐精品综合| 热久久这里只有精品视频| 熟女乱一区二区三区四区| 美女被草的视频在线观看| 久久精品国产99精品最新| 国产精品人妻熟女毛片av久| 一区二区三区人妻在线| 国产福利在线播放麻豆| 黄色国产自拍在线观看| 欧美亚洲91在线视频| 色婷婷国产精品视频一区二区保健 | 欧美中文字幕日韩精品| 老司机精品视频在线免费看|