这些年来,我们看到了多种用于 Web 开发的技术,例如:
同构反应:
它提供了客户端和服务器之间共享的通用代码库。
网页组件:
Polymer.js 展示了为浏览器创建原生元素的方式。
这两种技术都在朝着相反的方向发展。Web 开发人员应该遵循哪一种?这里欢迎任何建议/评论。
这些年来,我们看到了多种用于 Web 开发的技术,例如:
同构反应:
它提供了客户端和服务器之间共享的通用代码库。
网页组件:
Polymer.js 展示了为浏览器创建原生元素的方式。
这两种技术都在朝着相反的方向发展。Web 开发人员应该遵循哪一种?这里欢迎任何建议/评论。
React 和 Web 组件很相似,但又不一样。Web Components 的优点(或者至少这个想法,我们还没有完全实现)是您应该能够使用自定义元素扩展 HTML。浏览器不给你一个<datepicker>
元素?抛出一个实现它的 Web 组件!您不必担心它是如何实现的,您只需导入它,然后就可以使用它。原来它的可访问性差或浏览器支持差?其他人肯定会创造出更好的东西。
不过,目前 Web 组件的一个大问题是它们添加了全局名称。因此,如果有像 NPM for Node 这样的事实上的 Web 组件注册表,您将有一场争夺最佳名称的竞赛。但是对于 NPM,这不是一个大问题,因为您可以将变量命名为您想要的名称,例如var Promise = require('bluebird');
. 它告诉你它做了什么。但是一个名为的 Web 组件blue-bird
会很糟糕,因为在阅读使用它的标记时你不会知道它会做什么。因此,如果在 Web 组件最终确定之前没有解决这个问题,我们最终会得到长的、带前缀的、奇怪的名称,以避免名称冲突。
Web 组件旨在成为非常通用的小型组件。诸如日期选择器、带有自动完成功能的选择列表、地图元素等。它们并不是为了解决您如何构建应用程序,而是解决我们如何在站点之间重用公共元素的问题。因此,您可能会看到自定义元素,<date-picker>
但您不会看到特定应用的 Web 组件index.html
在<body><my-app></my-app></body>
哪里。my-app
好吧,也许您会看到它,但这并不是 Web 组件的真正目的,它并没有为您提供很多工具来实现它。
另一方面,React 就是关于如何构建应用程序以及在组件之间传递数据。您可以将纯 Javascript 对象作为属性传递给 React 组件,但唯一可以作为属性传递给 Web 组件的是字符串。这适用于简单的东西,但不适用于您的整个应用程序。
它们不是相互排斥的,因为您可能会看到很多人在他们的 React 应用程序中使用 Web 组件。但是如果你看到有人创建了一个依赖于 React 的 Web 组件,请随意对他们大喊大叫。Web 组件应该是隔离和可重用的,并且在其中包含像 React 这样的大型库/框架是一种反模式。