我如何 'swap' 在我的应用程序中对 react/addons 做出反应?
How can I 'swap' react for react/addons in my application?
我想使用 Perf 的东西。看来如果我这样做:
var React = require('react/addons');
在我自己的模块中然后是库(react-bootstrap、react-router 等)最终使用了普通 react 的另一个副本,然后事情就崩溃了。我正在使用 browserify。
是否有解决方法或其他方法?
要求 react
和 react/addons
会给你相同的对象。 react/addons
需要与 react
相同的模块 (lib/React
),并且 react/addons
甚至改变了该对象,以便任何需要 react
的人也将获得插件。
如果你最终在你的包中有多个版本的 React,那是因为你使用的库有 react
作为依赖而不是对等依赖。您应该使用 npm dedupe
来避免这种情况。但是 react-router
具有 react
作为对等依赖项,因此 react-router
将获得与您的模块(带有插件)相同的 react
模块实例。不知道你使用的其他依赖于 React 的包。
事实证明问题出在我的 gulpfile 上。 Tx 关于寻找 browserify shim 的评论,引导我找到解决方案:
我的 browserify 任务(来自 React JS workflow, part 2)在开发期间使用 browserify.external(..) 构建单独的 vendors.js(库)和 main.js(我的应用程序)包从 main.js 中排除库。我只需要添加 "react/addons" 作为外部库以及 "react".
问题解释在这里:
我想使用 Perf 的东西。看来如果我这样做:
var React = require('react/addons');
在我自己的模块中然后是库(react-bootstrap、react-router 等)最终使用了普通 react 的另一个副本,然后事情就崩溃了。我正在使用 browserify。
是否有解决方法或其他方法?
要求 react
和 react/addons
会给你相同的对象。 react/addons
需要与 react
相同的模块 (lib/React
),并且 react/addons
甚至改变了该对象,以便任何需要 react
的人也将获得插件。
如果你最终在你的包中有多个版本的 React,那是因为你使用的库有 react
作为依赖而不是对等依赖。您应该使用 npm dedupe
来避免这种情况。但是 react-router
具有 react
作为对等依赖项,因此 react-router
将获得与您的模块(带有插件)相同的 react
模块实例。不知道你使用的其他依赖于 React 的包。
事实证明问题出在我的 gulpfile 上。 Tx 关于寻找 browserify shim 的评论,引导我找到解决方案:
我的 browserify 任务(来自 React JS workflow, part 2)在开发期间使用 browserify.external(..) 构建单独的 vendors.js(库)和 main.js(我的应用程序)包从 main.js 中排除库。我只需要添加 "react/addons" 作为外部库以及 "react".
问题解释在这里: