欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

React創(chuàng)建組件的方法

今天小編給大家分享一下React創(chuàng)建組件的方法的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

創(chuàng)新互聯(lián)云計算的互聯(lián)網(wǎng)服務提供商,擁有超過13年的服務器租用、成都西信服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務許可證。專業(yè)提供云主機、虛擬主機、域名與空間、VPS主機、云服務器、香港云服務器、免備案服務器等。

組件介紹

組件(Components) 讓你可以將用戶界面分成獨立的,可復用的小部件,并可以對每個部件進行單獨的設計。

從定義上來說, 組件就像JavaScript的函數(shù)。組件可以接收任意輸入(稱為”props”), 并返回 React 元素,用以描述屏幕顯示內(nèi)容。

Props , 即屬性(Property), 在代碼中寫作 props,故可用 props 指代 properties。
react中有兩種組件:類組件(class components)、函數(shù)組件(function components)

創(chuàng)建類組件

類組件的定義有如下要求:

  • 類組件需要繼承自 React.Component

  • 類組件必須實現(xiàn)render函數(shù)

在ES6之前,可以通過create-react-class 模塊來定義類組件,但是目前官網(wǎng)建議我們使用ES6的class類定義。

使用class定義一個組件:

class App extends Component {
  constructor() {
    super()
    this.state = {}
  }

  render() {
    return <h3>Hello App</h3>
  }
}

我們來詳細分析一下類組件有哪幾個部分

  • constructor:這是類組件的構造函數(shù),是可選的,我們通常在constructor中初始化一些數(shù)據(jù);

  • this.state:我們在constructor中給類組件加入state屬性,你可以理解為組件中有一個state對象,其中包含著各種屬性,用于維護組件內(nèi)部的數(shù)據(jù)。同時你可以通過this.state.<屬性名>訪問該屬性;

  • render(): 該方法是 class 組件中唯一必須實現(xiàn)的方法,類組件通過render()返回組件的顯示內(nèi)容;

關于 state

我們可以通過this.state給類組件添加數(shù)據(jù)對象,我們可以通過this.state.<屬性名>去訪問我們setState中的屬性。

constructor(props) {
    super(props);
    this.state = {
      name:"xhs-rookies"
    }
  }

render(){
    return <h3>{this.state.name}</h3>
  }

但是我們想要修改上述例子中的name屬性的時候,則必須通過react給我們規(guī)定好的setState()方法,去給state添加或者修改其中的數(shù)值。

this.state.name = 'new xhs-rookies' //錯誤的方式,不允許采用
this.setState({ name: 'new xhs-rookies' }) //正確的方式

簡單點來說,在 react 中頁面是通過數(shù)據(jù)進行渲染,使用setState()更新的數(shù)據(jù),react 會幫我們執(zhí)行render()去更新頁面,從而將頁面中用到 state 中的數(shù)據(jù)全部更新。

關于 render

當 render 被調(diào)用時,它會檢查 this.props 和 this.state 的變化并返回很多類型,很多時候我們選擇讓該方法返回 React 元素,然后交由 React 去渲染展示:

React 元素:

  • 通常通過 JSX 創(chuàng)建。

  • 例如,<div/> 會被 React 渲染為 DOM 節(jié)點,<MyComponent/> 會被 React 渲染為自定義組件;

  • 無論是 <div/> 還是 <MyComponent/> 均為 React 元素。

詳細關于 render() 方法的內(nèi)容請見React.Component - Render)

創(chuàng)建函數(shù)組件

函數(shù)組件是使用 function 來進行定義的函數(shù),只是這個函數(shù)會返回和類組件中 render 函數(shù)返回一樣的內(nèi)容。

跟類組件相比,函數(shù)組件有自己的特點:

  • 沒有生命周期,也會被更新并掛載,但是沒有生命周期函數(shù);

  • 沒有 this(組件實例);

  • 沒有內(nèi)部狀態(tài)(state);

我們來定義一個函數(shù)組件:

export default function App() {
  return <div>xhs rookies</div>
}

渲染組件

在前幾篇中, 我們只遇到代表 DOM 標簽的 React 元素:

const element = <div />

然而,元素也可以代表用戶定義的組件:

const element = <Welcome name="xhs rookies" />

當 React 遇到一個代表用戶定義組件的元素時,它將 JSX 屬性以一個單獨對象的形式傳遞給相應的組件。 我們將其稱為 “props” 對象。

比如, 以下代碼在頁面上渲染“xhs rookies”:

function Welcome(props) {
  return <h2>Hello, {props.name}</h2>
}

const element = <Welcome name="xhs rookies" />
ReactDOM.render(element, document.getElementById('root'))

我們簡單解釋一下上面這個例子:

  • 我們調(diào)用了 ReactDOM.render() 方法并向其中傳入了 <Welcome name="xhs rookies" /> 元素。

  • React 調(diào)用 Welcome 組件,并向其中傳入了 {name: 'xhs rookies'} 作為 props 對象。

  • Welcome 組件返回 <h2>xhs rookies</h2>。

  • React DOM 迅速更新 DOM ,使其顯示為 <h2>xhs rookies</h2>。

注意: 組件名稱總是以大寫字母開始。

舉例來說, <div/> 代表一個 DOM 標簽,而 <Welcome/> 則代表一個組件,并且需要在作用域中有一個 Welcome 組件。

你可以深入 JSX閱讀更多關于這點背后的原因。

合成組件

組件可以在它們的輸出中引用其它組件。這使得我們可以使用同樣的組件來抽象到任意層級。一個按鈕,一個表單,一個對話框,一個屏幕:在 React 應用中,所有這些都通常描述為組件。

例如,我們可以創(chuàng)建一個 App 組件,并在其內(nèi)部多次渲染 Welcome:

function Welcome(props) {
  return <h2>Hello, {props.name}</h2>
}

function App() {
  return (
    <div>
      <Welcome name="rookie-Sara" />
      <Welcome name="rookie-Cahal" />
      <Welcome name="rookie-Edite" />
    </div>
  )
}

 
ReactDOM.render(<App />, document.getElementById('root'))

通常,新的 React apps 都有一個單獨的頂層 App 組件。然而,如果你在已有的應用中整合 React,你可以需要由下至上地, 從類似于 Button 這樣的小組件開始, 逐漸整合到視圖層的頂層。

提取組件

不要害怕把一個組件分為多個更小的組件。

舉個例子,思考下名 Comment 組件:

function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <img className="Avatar" src={props.author.avatarUrl} alt={props.author.name} />
        <div className="UserInfo-name">{props.author.name}</div>
      </div>
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{formatDate(props.date)}</div>
    </div>
  )
}

它接受 author(一個對象),text(一個字符串)和 date(一個日期)作為 props。

這個組件修改起來很麻煩,因為它是被嵌套的,而且很難復用其中的某個部分。讓我們從其中提取一些組件。

首先,提取頭像 Avatar:

function Avatar(props) {
  return <img className="Avatar" src={props.user.avatarUrl} alt={props.user.name} />
}

Avatar 組件不用關心它在 Comment 中是如何渲染的。這是為什么我們它的 prop 一個更通用的屬性名: user, 而不是 author 的原因。

我們建議從組件本身的角度來命名 props 而不是它被使用的上下文環(huán)境。

我們可以稍微簡化一下 Comment 組件:

function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <Avatar user={props.author} />
        <div className="UserInfo-name">{props.author.name}</div>
      </div>
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{formatDate(props.date)}</div>
    </div>
  )
}

接下來,我們提取用戶信息 UserInfo 組件, 用于將 Avatar 顯示在用戶名旁邊:

function UserInfo(props) {
  return (
    <div className="UserInfo">
      <Avatar user={props.user} />
      <div className="UserInfo-name">{props.user.name}</div>
    </div>
  )
}

這使我們可以進一步簡化 Comment 組件:

function Comment(props) {
  return (
    <div className="Comment">
      <UserInfo user={props.author} />
      <div className="Comment-text">{props.text}</div>
      <div className="Comment-date">{formatDate(props.date)}</div>
    </div>
  )
}

提取組件可能看起來是一個繁瑣的工作,但是在大型的 Apps 中可以回報給我們的是大量的可復用組件。一個好的經(jīng)驗準則是如果你 UI 的一部分需要用多次 (Button,Panel,Avatar),或者本身足夠復雜(App,F(xiàn)eedStory,Comment),最好的做法是使其成為可復用組件。

Props 是只讀的

無論你用函數(shù)或類的方法來聲明組件, 它都無法修改其自身 props. 思考下列 sum (求和)函數(shù):

function sum(a, b) {
  return a + b
}

這種函數(shù)稱為 “純函數(shù)” ,因為它們不會試圖改變它們的輸入,并且對于同樣的輸入,始終可以得到相同的結果。

反之, 以下是非純函數(shù), 因為它改變了自身的輸入值:

function withdraw(account, amount) {
  account.total -= amount
}

雖然 React 很靈活,但是它有一條嚴格的規(guī)則:

注意: 所有 React 組件都必須是純函數(shù),并禁止修改其自身 props 。
當然, 應用 UI 總是動態(tài)的,并且隨時有可以改變。

如果我們想要動態(tài)改變 UI,那么就會涉及到我們上面說到的state(狀態(tài)) 。我們通過動態(tài)的改變state來渲染整個頁面,我們后面會提及。

以上就是“React創(chuàng)建組件的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標題名稱:React創(chuàng)建組件的方法
標題來源:http://aaarwkj.com/article34/ijhipe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、App開發(fā)、營銷型網(wǎng)站建設做網(wǎng)站、微信公眾號網(wǎng)站策劃

廣告

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

營銷型網(wǎng)站建設
高清不卡一区二区在线观看| 亚洲精品成人一区二区| 高潮国产精品一区二区| 精品国产女同一区二区| 亚洲欧美高清一区二区| 午夜少妇伦理一区二区| 丝袜美腿一区二区三区动态图| 中文字幕日韩av综合在线| av男人的天堂一区二区| 97门久欧美日韩久久| 国产精品大白屁股视频| 欧美亚洲综合日韩精品区| 国产成人啪精品视频免费| 国内一级片内射视频播放| 中日韩中文字幕一区二区| 日韩免费的黄色片网站| 自拍偷拍欧美日韩第一页| 日本中文字幕女优观看| 日本人妻系列在线播放| 偷拍偷窥女厕一区二区视频| 日韩蜜桃av一二三四区| 亚洲无综合素人在线观看| 国产精品一区二区久久毛片| 日本午夜在线观看视频| 亚洲第一中文字幕久久| 日韩精品综合成人欧美| 欧美日韩亚洲一区视频| 日韩中文不卡人成在线视频 | 国产特级黄片免费观看| 亚洲黄色大片在线免费观看| 国产熟女一区二区精品视频| 九九蜜桃视频香蕉视频| 国产久精品热看久品热久热| 日韩在线一区二区视频观看| 欧美激情性国产精品潮| 十八禁一区二区在线观看| 日韩夫妻性生活免费视频| 日本国产一区二区在线观看| 亚洲国产日韩欧美视频| 日本日本熟妇在线视频| 精品人妻一区二区三区乱码|