如何在 react-native 中要求下划线
Posted
技术标签:
【中文标题】如何在 react-native 中要求下划线【英文标题】:How to require underscore in react-native 【发布时间】:2015-11-19 04:13:24 【问题描述】:react-native 提及的变更日志 https://facebook.github.io/react/blog/2015/04/17/react-native-v0.4.html
NPM 模块兼容性:NPM 上有很多不依赖于节点/浏览器内部的库,这些库在 React Native 中非常有用,例如 superagent、下划线……
但这对我不起作用。 这就是我通过 package.json 安装的方式
# package.json
"dependencies":
"react-native": "*",
"underscore": "^1.8.3"
...
我确实在 npm 依赖中看到了它
# npm ls
├─┬ react-native@0.8.0
| ...
├── react-native-navbar@0.7.3
└── underscore@1.8.3
它确实适用于其他一些反应组件
这就是我的要求
var _ = require('underscore');
但是不行,_
是未定义的
【问题讨论】:
你在同一个文件中使用它吗?你能在你的问题中粘贴一些代码吗? 不,underscore
库在node_modules
文件夹下,我使用的其他库如react-native-keyboardevents
、react-native-navbar
都在node_modules
下。但他们工作。我不知道它们有什么区别
1.也许您正试图从不同的文件中使用它?没有包含underscore
的文件? 2.也许尝试使用浏览器的断点。 cmd +d 在您的模拟器中并使用源选项卡进行调试。
我在每个文件中都试过了,但是没有用。我在控制台中调试了这个和require('underscore')
,它返回Error: Requiring unknown module "underscore". If you are sure the module is there, try restarting the packager.
,我做到了(关闭并重新启动npm)。但它仍然失败。
【参考方案1】:
如果你使用的是 ES6 模块(比如在 ReactNative 中),正确的方法是使用 import 语句:
import _ from 'lodash'
let text = _.isUndefined(route.rightButtonText) ? 'Default value' : route.rightButtonText;
【讨论】:
我用它在 React 中导入 Underscore 并且它起作用了。 我认为我们应该只导入这样的必要方法:``` import flatten, union from 'lodash'; ```【参考方案2】:要在 React 中成功运行 require,我就是这样做的:
安装下划线。
npm install underscore
在 package.json 中定义一个依赖项
"dependencies":
"react": "^0.13.*",
"underscore": "^1.8.3"
在要使用的函数内定义下划线。
render()
let _ = require('underscore')
let buttonStyle = _.clone(button);
【讨论】:
不要引用我的话,但我认为在 render 方法上做一个 require 不是很明智。【参考方案3】:我找到了问题,问题是
我不使用它
我只需要它并尝试在控制台中测试它。
当我在某个地方使用它时,比如_.map([1, 2, 3], function(num) return num * 3; )
任何地方。
然后我在控制台中测试它,这次它确实需要库。
我不确定这是 npm require 还是 react-native 行为?
当你不使用库时,即使你需要它,它也不会被需要。
【讨论】:
【参考方案4】:我正在使用这样的 lodash(下划线加上更多内容):
将此添加到 package.json
"lodash": "^3.10.0"
在您需要的组件中,只需编写:
var _ = require('lodash')
你已经准备好了。
如果你需要lodash,这里有更多关于lodash的信息
【讨论】:
以上是关于如何在 react-native 中要求下划线的主要内容,如果未能解决你的问题,请参考以下文章
使用ClojureScript,Re-natal和React-Native禁用RTL?