React学习(11)—— 高阶应用:Web组件
2017-04-11 00:00
519 查看
摘要: 介绍React如何整合外部第三方组件
虽然大部分使用React的开发人员并不需要使用Web组件,但是在某些情况,特别是引入了某些第三方库,还是需要使用到相关机制。
Web组件常会暴露一些必要的API接口,例如一个 video Web组件可能会暴露
由第三方Web组件触发的事件也许并不能通过React的渲染树传递,此时需要在组件中去手工的触发事件。
一个经常导致混乱的地方是,Web组件使用的是“class”而React使用的是“className”,例如:
Web组件
从概念上说,React 和 Web组件 分别用于解决不同的问题。Web组件提供了强大的封装特性来支持其可重复使用性,而React提供了一系列声明性(declarative)接口保证Dom结构和数据同步。但是某些时候这2个目标是互补的。对于开发人员来说将React用于Web组件、或将Web组件用于React、或2者皆有并非难事。虽然大部分使用React的开发人员并不需要使用Web组件,但是在某些情况,特别是引入了某些第三方库,还是需要使用到相关机制。
在React中使用Web组件
class HelloMessage extends React.Component { render() { return <div>Hello <x-search>{this.props.name}</x-search>!</div>; } }
Web组件常会暴露一些必要的API接口,例如一个 video Web组件可能会暴露
play()和
pause()方法。为了获取Web组件暴露的这些API接口,需要在React编码使用Refs特性来直接获取真实的Dom节点。如果引入第三方的Web组件,最好的解决方案使用一个React组件来包装引入的Web组件并最终作为一个React组件来使用。
由第三方Web组件触发的事件也许并不能通过React的渲染树传递,此时需要在组件中去手工的触发事件。
一个经常导致混乱的地方是,Web组件使用的是“class”而React使用的是“className”,例如:
function BrickFlipbox() { return ( <brick-flipbox class="demo"> <div>front</div> <div>back</div> </brick-flipbox> ); }
在Web组件中使用React
const proto = Object.create(HTMLElement.prototype, { attachedCallback: { value: function() { const mountPoint = document.createElement('span'); this.createShadowRoot().appendChild(mountPoint); const name = this.getAttribute('name'); const url = 'https://www.google.com/search?q=' + encodeURIComponent(name); ReactDOM.render(<a href={url}>{name}</a>, mountPoint); } } }); document.registerElement('x-search', {prototype: proto});
相关文章推荐
- React-native学习过程 八 组件综合应用
- React学习笔记之高阶组件应用
- 在webpack应用的入口代码中,实现react相关组件的热重载(hot reload)
- React-native学习过程 九 Text组件综合应用
- 空气中充满 Web 的味道:11 个最佳 Adobe AIR 应用
- web服务器和应用服务器的区别以及负载均衡---学习笔记
- 用JSP调用以Web应用形式部署在Tomcat 5.5中的SCA服务组件的例子
- AJAX.NET WebService应用的学习体会
- 巧用FileSystem组件实现WEB应用中的本地特定打印
- System.Web.Mvc.HtmlHelper学习及应用
- 空气中充满 Web 的味道:11 个最佳 Adobe AIR 应用
- COM 组件设计与应用11 - IDispatch 及双接口的调用
- NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
- JFreeChart组件在基于JSP的Web统计图表中的应用与实现
- vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient
- 强大的DataGrid组件[3]_数据交互之Linq to SQL——Silverlight学习笔记[11]
- 巧用FileSystem组件实现WEB应用中的本地特定打印的方法
- Web开发者向桌面应用开发转型之数据结构学习
- JSP和JSF双剑合并 打造完美Web应用-JSP实例学习教程
- php学习笔记(11):MYSQL在php5中的应用