国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

和其他庫(jquery,backbone)一起使用react

ckllj / 3354人閱讀

摘要:也就是說,只要一發生事件。和其他的庫共用由于方法的靈活性使得可以被嵌入到其他的應用中。事實上,這就是在被使用的方式。在應用中使用的層在組件中消費中和最簡單的方法是監聽各種事件并手動進行強制更新。并且使用組件來渲染各個項。

注:由于譯者水平有限,難免會出現錯誤,希望大家能指出,謝謝。

react 可以被用在任何的web 應用中。它可以被嵌入到其他的應用中,要是你小心一點,其他的應用也能被嵌入到react中。這篇文章將會從一些常用的使用場景入手,重點會關注與jQuery 和backbone 的交互。但是里面的思想在我們和其他庫交互時都是可以被參考的。

和操縱DOM的插件的交互

react 感知不到它管理之外的dom 的變化。react的更新是取決于其內部的表現,如果同樣的DOM節點被其他可操作dom節點的插件更改了,react內部狀態就會變的很混亂并且無法恢復了。

這并不意味著react 無法和那些操縱DOM 的插件一起共用,你只需要更加清楚每個插件做了什么。

最簡單的避免這種沖突發生的方式是阻止react 組件的更新。你可以通過渲染一個react 沒有必要去更新的元素,比如一個空的

如何處理這種問題

為了更好的闡述這個問題,讓我們來對一個一般的jquery 插件添加一個wrapper。

首先,我們在這個節點上添加一個ref屬性。在componentDidMount 方法里,我們通過獲取這個節點的引用,將它傳給jquery 插件。

為了避免react 在渲染期間對這個節點進行改變, 我們在render() 方法里面返回了一個空的

.這個空的節點沒有任何的屬性或子節點,所以React 不會對該節點進行更新,這個節點的控制權完全在jQuery插件上。這樣就不會出現react 和jquery 插件都操作同樣的dom 的問題了。

class SomePlugin extends React.Component {
  componentDidMount() {
    this.$el = $(this.el);
    this.$el.somePlugin();
  }

  componentWillUnmount() {
    this.$el.somePlugin("destroy");
  }

  render() {
    return 
this.el = el} />; } }

需要注意的是,我們定義了componentDidMount() 和componentWillUnmount() 兩個生命周期的鉤子函數。這是因為大多數的jQuery插件都將事件監聽綁定在DOM上,所以在componentWillUnmount 中一定要移除事件監聽。如果這個插件沒有提供移除的方法,那你就要自己寫了。一定要記得移除插件所注冊的事件,否則可能會出現內存泄露。

和jQuery 的選擇器插件共用

為了對這些概念有更深入的了解,我們為Chosen 插件寫了一個小型的wrapper。Chosen 插件的參數是一個 節點應用了該組件。它會讀取原始DOM節點的屬性,使用內聯樣式隱藏它。并且使用自己的展示方式在

class Chosen extends React.Component {
  render() {
    return (
      
); } }

需要注意的是,我們在標簽后面添加一個傳入的節點。然而,就React而言,

標簽通常只有一個孩子節點。這就是我們如何確保React 的更新不會和通過Chosen 插入的額外的DOM節點沖突的原因。很重要的一點是,如果你在React 流之外修改了DOM節點,你必須確保React 不會因為任何原因再對這些DOM節點進行操作。

接下來,我們繼續實現生命周期的鉤子函數。我們需要在componentDidMount里使用 this.el = el}>

以上對于在render 里面獲取你的組件就足夠了,但是我們還希望值變化時能給實現通知。因為,我們通過Chosen 在中的屬性this.props.children 的更新。但是我們同時也在componentDidUpdate 的生命周期函數里添加通知Chosen 他的children 列表變化的函數。

componentDidUpdate(prevProps) {
    if (preProps.children !== this.props.children) {
        this.$el.trigger("chosen:updated");
    }
}

通過這種方式,當通過React 管理的 this.el = el}> {this.props.children}

); } } 和其他的View 庫共用

由于ReactDOM.render()方法的靈活性使得React可以被嵌入到其他的應用中。

由于React 通常被用來將一個React 節點渲染到某個DOM元素中,而且ReactDOM.render()可以被UI的各個獨立的部分多次調用,小到一個按鈕,大到一個app。

事實上,這就是React 在Facebook 被使用的方式。這使得我們可以在React 中一塊一塊的開發一個應用,并且可以把它整合在現有的服務器渲染的模版中或者其他的客戶端代碼中。

使用React替換基于字符串的渲染

在一些老的web 應用,一種常見的方式是寫一大段DOM結構作為字符串,然后使用$el.html(htmlString) 的方式插入到DOM節點中。如果你的代碼庫中有類似的場景,那么推薦你使用react。你只需要將使用字符串渲染的部分改成react 組件就可以了。
下面是一個jQuery 的實現

$("#container").html("");
$("#btn").click(function() {
  alert("Hello!");
});

改成react 的實現

function Button() {
  return ;
}

ReactDOM.render(
  

接下來,你可以將更多的業務邏輯移到react組件中去并且采用更多react 實踐方式。例如,組件最好不要依賴id,因為同樣的組件可能會被渲染多次。而且,我們推薦使用react 的事件系統,直接在組件; } function HelloButton() { function handleClick() { alert("Hello!"); } return

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88570.html

相關文章

  • 2017年前端流行的數百個javascript,你會幾個?

    摘要:有數百個免費的庫出來,為應用程序選擇正確的框架變得非常困難。是流行的驅動技術之一,由于年創建。在這三個塊中,有幾個暴露低層接口的綁定。反應由,和許多開發人員和個人的社區維護。誕生于年,是一個輕量級的框架。 有數百個免費的JS庫出來,為應用程序選擇正確的JavaScript框架變得非常困難。一些開發商最終會拋棄,而其他開發者則迅速發展,并得到廣泛采用。許多開發人員只知道像jQuery和R...

    CoXie 評論0 收藏0
  • 《高性能JavaScript》(讀書筆記)

    摘要:加載的模塊會以參數形式傳入該函數,從而在回調函數內部就可以使用這些模塊。異步加載,和,瀏覽器不會失去響應它指定的回調函數,只有前面的模塊都加載成功后,才會運行,解決了依賴性的問題。插件,可以讓回調函數在頁面結構加載完成后再運行。 這次主要是對《高性能JavaScript》一書的讀書筆記,記錄下自己之前沒有注意到或者需要引起重視的地方 第一章 加載和執行 js代碼在執行過程中會阻塞瀏覽...

    moven_j 評論0 收藏0
  • 前端MVC手腳架

    摘要:前端手腳架項目地址構建工具基礎庫這個項目類似,主要是用于記錄,以及考察現在比較流行的前端庫在實際開發當中的開發體驗。其中,構建都是基于,支持語法但在中,只用到的模塊管理與析構語法。 前端MVC手腳架 項目地址 https://github.com/lizzz0523/mvc-mode-seed 1.構建工具 [x] webpack [x] babel-loader [x] babel...

    pekonchan 評論0 收藏0
  • 基于 Backbone + node 的個人簡歷生成器(個人學習總結)

    摘要:應用的功能這個應用是一個個人簡歷生成器。比較好的教程有這一個。這樣的命名污染問題自然顯而易見。而且發出多次請求也會影響性能。明顯不利于維護。然而我希望能夠不發生變化,因為是在文件的前提下的標簽頁,不能換一個標簽就重建一個。 為什么學習backbone?這是個好問題。在這個前端框架爆炸的年代,比起backbone,對開發來說有更多更好的選擇,react,vue,angular等等。但這些...

    lansheng228 評論0 收藏0
  • 2017年前端框架、類、工具大比拼

    摘要:相比于開發人員的數量,目前框架類庫和工具的數量似乎更多一些。本文將會討論目前最為流行的客戶端框架類庫和工具以及它們之間的基本差異。典型的類庫包括字符串處理日期元素事件動畫網絡請求等功能。所以不需要明確的區分類庫框架和工具。 相比于JavaScript開發人員的數量,目前JavaScript框架、類庫和工具的數量似乎更多一些。截至2017年5月,GitHub上的快速搜索顯示,有超過110...

    Alliot 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<