目錄
核心函數1:render
核心函數2:React.createClass
元件state
元件的生命週期
首頁 web前端 js教程 react的函數有哪些? react函數的詳細解析(附實例)

react的函數有哪些? react函數的詳細解析(附實例)

Sep 11, 2018 pm 03:55 PM
javascript react

這篇文章主要講述的就是關於react該如何學習的介紹,現在讓我們一起來看文章的正文內容吧

React根本上其實就是一個JavaScript函式庫。

它體現了前後分離的思想,將部分組裝頁面的工作轉交給瀏覽器來完成;不像JSP文件,頁面的佈局和填入數據是在伺服器完成後發送給瀏覽器的的。

這樣做的好處自然有很多:首先,React將DOM&JavaScript封裝成模組(元件),這些元件的可重複使用性很強,不僅如此,元件也可以讓測試和關注分離變得簡單。其次,當資料變化的時候,React能夠自動更新使用者介面,並且僅更新需要更新的部分。

核心函數1:render

這個函數的功能就是提供一個模組,它就像是樂高玩具的一塊積木,用來組裝頁面。

簡單範例:(先給的是html程式碼,後面給的是JSX程式碼。JSX就是JavaScript XML的意思)

<p id="container" class="firstContainer">
  <p>replaced</p>
</p>/*************************************************/ReactDOM.render(
    <p>Hello, world!</p>,
    document.getElementsByClassName(&#39;firstContainer&#39;)[0]
);

可以看到class 為firstContainer 的p的內容被替換掉了,替換成了我們在render中寫入的程式碼:hello world!

另外document.getElementsByClassName('firstContainer')[0]可以替換成任何原生的JavaScript獲取**單獨某一個(一定是一個Node,因此如果你使用document.getElementsByClassName這樣的方法必須要加上[n])**DOM元素的方法:document.getElementById或document.getElementsByTagName等都可以。

更複雜一點的例子,我們可以來將這裡的<p>Hello, world!</p> 擴充。

<p id="container" class="firstContainer">
  <p>replaced</p>
</p>/*************************************************/var name = "Emily";
ReactDOM.render(
  <p>
  {
    (function(){        return <p>Hello, {name}!</p>
    })()
  }
  </p>,
  document.getElementById(&#39;container&#39;)
);

我們可以看到JSX語法的神奇之處了,在程式碼中,JS和DOM可以說是混雜在一起的。而JSX 的基本語法規則:遇到 HTML 標籤(以 < 開頭),就用 HTML 規則解析;遇到程式碼區塊(以 { 開頭),就用 JavaScript 規則解析。

核心函數2:React.createClass

這個函數允許我們自己定義需要的元件,定義好的元件可以作為像p這樣的標籤一樣,直接應用於render函數中。

一個簡單的栗子:

<p id="container" class="firstContainer">
  <p>replaced</p>
</p>/*************************************************/var HelloWorldBox = React.createClass({
  render: function() {    return (
      <p className="helloWorldBox">
        Hello, world! I am a helloWorldBox.
      </p>
    );
  }
});
ReactDOM.render(
  <HelloWorldBox />,
  document.getElementById(&#39;container&#39;)
);

在這個栗子裡,HelloWorldBox就是一個最簡單的元件。

關於這個元件,我們還可以獲得更多資訊。例如,使用props

(實例來自React官網)

<p id="container" class="firstContainer">
  <p>replaced</p>
</p>/*************************************************/var Comment = React.createClass({
  render: function() {    return (
      <p className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
        {this.props.children}
      </p>
    );
  }
});var CommentList = React.createClass({
  render: function() {    return (
      <p className="commentList">
        <Comment author="Pete Hunt">This is one comment</Comment>
        <Comment author="Jordan Walke">This is *another* comment</Comment>
      </p>
    );
  }
});
ReactDOM.render(
  <CommentList />,
  document.getElementById(&#39;container&#39;)
);

在這個栗子中,我們使用React.createClass方法建立了兩個元件,我們可以看到,在元件CommentList中,嵌套了Comment:也就是說,CommentList是由多個Comment組成的。我們在CommentList中為Comment定義了一個屬性:author。那麼,在Comment元件中,就可以透過{this.props.author}讀到這個屬性,而透過{this.props.children},則可以讀到這個元件的子節點。

存取外部數據:

<p id="container" class="firstContainer">
  <p>replaced</p>
</p>/*************************************************/var Comment = React.createClass({
  render: function() {    return (
      <p className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
        {this.props.children}
      </p>
    );
  }
});var names = [&#39;Alice&#39;, &#39;Emily&#39;, &#39;Kate&#39;];
ReactDOM.render(
  <p>
  {
    names.map(function (name) {      return <Comment author={name}>is an author~</Comment>
    })
  }
  </p>,
  document.getElementById(&#39;container&#39;)
);

在這裡,數組names是外部數據,我們透過建立元件,將這些數據嵌入了網頁的DOM中。

元件state

每個元件都有一個屬性:state,開發者可以透過呼叫this.setState()來改變元件的狀態。當狀態更新之後,元件就會重新渲染自己。 state和props都是一個元件的特性,但是不同的是,props是不變的,但是state是可以改變的。

getInitialState()可以設定元件的初始化狀態,而這個函數在元件的生命週期中只執行一次。

更新狀態:

註:componentDidMount函數是元件的生命週期函數,它是一個在元件被渲染的時候React自動呼叫的方法,後面會詳細講到。

var CommentBox = React.createClass({
  getInitialState: function() {
    return {data: []};
  },
  componentDidMount: function() {
    $.ajax({
      url: this.props.url,
      dataType: &#39;json&#39;,
      success: function(data) {
        this.setState({data: data});
      }.bind(this),
      error: function(xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },
  render: function() {
    return (
      <p className="commentBox">
        <h1>Comments</h1>
        <CommentList data={this.state.data} />
      </p>
    );
  }
});

這個栗子中,我們透過ajax取得數據,並透過函數this.setState將取得的數據設定為this.state.data。然後,在CommentList中,設定data={this.state.data},就可以將從伺服器取得的資料顯示出來。 (想看更多就到PHP中文網React參考手冊欄位學習)

元件的生命週期

元件的生命週期分為以下三種:

  1. Mounting:已插入真實DOM

  2. #Updating:正在重新渲染

  3. ##Unmounting:已移出真實DOM

在元件的生命週期中,有生命週期函數會被自動呼叫。它們分別是:

componentWillMount()componentDidMount()componentWillUpdate(object nextProps, object nextState)componentDidUpdate(object prevProps, object prevState)componentWillUnmount()

另外還有兩個特殊狀態的處理函數:

componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

下面這個栗​​子來自於阮一峰大神的博客:

var Hello = React.createClass({
  getInitialState: function () {
    return {
      opacity: 1.0
    };
  },
  componentDidMount: function () {
    this.timer = setInterval(function () {
      var opacity = this.state.opacity;
      opacity -= .05;      if (opacity < 0.1) {
        opacity = 1.0;
      }      this.setState({
        opacity: opacity
      });
    }.bind(this), 100);
  },
 render: function () {
    return (
      <p style={{opacity: this.state.opacity}}>
        Hello {this.props.name}
      </p>
    );
  }
});
ReactDOM.render(
  <Hello name="world"/>,
  document.body
);

componentDidMount函數在元件插入真實DOM以後調用,在這個函數裡,我們設定了一個定時器,每100毫秒改變一次透明度,直到元件完全透明後,將透明度再設定成1(初始的透明度設定為1)。這樣,這個元件聚會不停在被渲染。這樣,我們就在頁面上得到了一個不停閃爍的hello world字串。如果我們寫函數:

componentDidUpdate:function(){
    console.log("did update");
}
我們就可以在控制台看到不斷的輸出。

React根本上其實就是一個JavaScript函式庫。

它體現了前後分離的思想,將部分組裝頁面的工作轉交給瀏覽器來完成;不像JSP文件,頁面的佈局和填入數據是在伺服器完成後發送給瀏覽器的的。

這樣做的好處自然有很多:首先,React將DOM&JavaScript封裝成模組(元件),這些元件的可重複使用性很強,不僅如此,元件也可以讓測試和關注分離變得簡單。其次,當資料變化的時候,React能夠自動更新使用者介面,並且僅更新需要更新的部分。

這篇文章到這就結束了(想看更多就到PHP中文網React使用手冊欄位中學習),有問題的可以在下方留言提問。

以上是react的函數有哪些? react函數的詳細解析(附實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1604
29
PHP教程
1510
276
React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

React的生態系統:庫,工具和最佳實踐 React的生態系統:庫,工具和最佳實踐 Apr 18, 2025 am 12:23 AM

React生態系統包括狀態管理庫(如Redux)、路由庫(如ReactRouter)、UI組件庫(如Material-UI)、測試工具(如Jest)和構建工具(如Webpack)。這些工具協同工作,幫助開發者高效開發和維護應用,提高代碼質量和開發效率。

Netflix的前端:React(或VUE)的示例和應用 Netflix的前端:React(或VUE)的示例和應用 Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

反應:JavaScript庫用於Web開發的功能 反應:JavaScript庫用於Web開發的功能 Apr 18, 2025 am 12:25 AM

React是由Meta開發的用於構建用戶界面的JavaScript庫,其核心是組件化開發和虛擬DOM技術。 1.組件與狀態管理:React通過組件(函數或類)和Hooks(如useState)管理狀態,提升代碼重用性和維護性。 2.虛擬DOM與性能優化:通過虛擬DOM,React高效更新真實DOM,提升性能。 3.生命週期與Hooks:Hooks(如useEffect)讓函數組件也能管理生命週期,執行副作用操作。 4.使用示例:從基本的HelloWorld組件到高級的全局狀態管理(useContext和

React的未來:Web開發的趨勢和創新 React的未來:Web開發的趨勢和創新 Apr 19, 2025 am 12:22 AM

React的未來將專注於組件化開發的極致、性能優化和與其他技術棧的深度集成。 1)React將進一步簡化組件的創建和管理,推動組件化開發的極致。 2)性能優化將成為重點,特別是在大型應用中的表現。 3)React將與GraphQL和TypeScript等技術深度集成,提升開發體驗。

React的前端開發:優勢和技術 React的前端開發:優勢和技術 Apr 17, 2025 am 12:25 AM

React的優勢在於其靈活性和高效性,具體表現在:1)組件化設計提高了代碼重用性;2)虛擬DOM技術優化了性能,特別是在處理大量數據更新時;3)豐富的生態系統提供了大量第三方庫和工具。通過理解React的工作原理和使用示例,可以掌握其核心概念和最佳實踐,從而構建高效、可維護的用戶界面。

了解React的主要功能:前端視角 了解React的主要功能:前端視角 Apr 18, 2025 am 12:15 AM

React的主要功能包括組件化思想、狀態管理和虛擬DOM。 1)組件化思想允許將UI拆分成可複用的部分,提高代碼可讀性和可維護性。 2)狀態管理通過state和props管理動態數據,變化觸發UI更新。 3)虛擬DOM優化性能,通過內存中的DOM副本計算最小操作更新UI。

React和前端開發:全面概述 React和前端開發:全面概述 Apr 18, 2025 am 12:23 AM

React是由Facebook開發的用於構建用戶界面的JavaScript庫。 1.它採用組件化和虛擬DOM技術,提高了UI開發的效率和性能。 2.React的核心概念包括組件化、狀態管理(如useState和useEffect)和虛擬DOM的工作原理。 3.在實際應用中,React支持從基本的組件渲染到高級的異步數據處理。 4.常見錯誤如忘記添加key屬性或不正確的狀態更新可以通過ReactDevTools和日誌調試。 5.性能優化和最佳實踐包括使用React.memo、代碼分割和保持代碼的可讀性與可維

See all articles