无标题文章

一、访问受控的DOM节点想要访问受React控制的DOM节点,首先必须能够访问到负责控制这些DOM的组件。这可以通过添加ref属性来实现。var DoodleArea = React.creatClass({rendre:funcitn(){    return

}}); 可以通过this.refs.mainCanvas访问到

组件。可以使用this.refs.mainCanvas.getDOMNOde()方法反问底层的DOM节点,不要在render中这么做,因为render方法完成并且执行更新之前底层的DOM可能不是最新的。同样,知道组件被挂载你才能去调用getDOMNode()方法,此时compontenDidMount事件处理器会被触发。例如:var DoodleArea = React.creatClass({ render:function(){      this.getDOMNode();//此时调用会引起异常,因为组件还未挂载。      return},

componentDidMount:function(){

var canvasNode = this.refs.mainCanvas.getDOMNode()

/ /此处是有效的,我们可以访问到节点,并可以调用painting方法

}

});

PS:componentDidMount内部并不是getDOMNode()唯一的执行环境。事件处理器也可以在组件挂载后触发,所以可以在事件处理器中调用getDOMNode()方法。

如果可以使用其他方法实现就不要使用ref和getDOMNode()的方法,这样会成为React性能优化上的障碍,并增加应用的复杂性,所以只有当常规的技术无法实现所需功能时才应该考虑他们。

二、整合非React类库

一些JavaScript类库没有使用React,一些类库不需要访问DOM,但如果徐娅哦使用他们,保持它们的状态和React的状态之间的同步是成功整合的关键,例如使用一个autocomplete类库。

autocomplete({

target:document.getElementById("cities"),

data:[

"San Francisco",

"St.Louis",

"Amsterdam",

"Los Angeles"

],

erents:{

select:function(city){

aletrt("You have selecte the city of "+city);

}

}

});

为了整合到React我们需要在componentDidMount处理其中实现连接。

三、侵入式插件

假如React引入了一个糟糕的插件,它修改了父元素,React无能为力,并且它与React不兼容,之时候最好的办法就是找另一个插件或者修改它的源码,面对这种侵入式的插件,保护好React的最佳方式就是把DOM操作的权利完全交给自己。例如:

var SuperSelect =React.createClass({

render:function(){

return ;

}

})'

如上React会渲染上面的组件成一个单独的div,它没有子元素,也没有props。

var SurSelect = React.createClass({

render:function(){

return;

},

componentDidMount:function(){

var el = this.el =document.createElement('div');

this.getDOMNode().appendChild(el);

$(el).superSelect(this.props);

$(el).on('superSelect',this.handleSuperSelectChange);

},

handleSuperSelectChange:function(){

}

});

此时在组件渲染好的div内插入一个div,我们自己可以控制内层的div,这同样意味着我们有责任区完成清理工作。

componentWillUnmount:funciton (){

//从DOM中移除节点

this.getDOMNode().removeChild(this.el);

//移除superSelect上的所欲监视器

$(this.el).off();

}

除了这样的清理工作,最好能够查阅插件的文档,检查是否友情里这些节点的额外需求,它可能设置了全聚德事件监听器、定时器或者初始Ajax请求,这些都选哟被清理掉。

这里还需要一步操作,即处理更新。还可以通过两种方式触发:模拟卸载后重新挂载,或者使用插件更新操作API,前者更可靠,而后者则更高效、清晰。

卸载重新/重新挂载方案的代码:

componetDidUpdate:function(){

this.componentWillUnmount();

this.componentDidMount();

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • ##Flux与面向组件化开发首先要明确的是,Flux并不是一个前端框架,而是前端的一个设计模式,其把前端的一个交互...
    吴小蛆阅读 308评论 0 0
  • React创建组件的三种方式及其区别 React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同...
    程序猿吴彦祖阅读 256评论 0 0
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,813评论 1 18
  • This is a collection of simple demos of React.js. These d...
    dhuztx阅读 524评论 0 0
  • 高考的我回来了
    正能量L7阅读 156评论 0 0