如何在 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-keyboardeventsreact-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 中要求下划线的主要内容,如果未能解决你的问题,请参考以下文章

React-Native 自定义TextInput样式

React-Native 自定义TextInput样式

使用ClojureScript,Re-natal和React-Native禁用RTL?

iOS 上的自动更正不会在 react-native 中触发 onChangeText

如何在 react-native 中动态加载模块?

16.python模块之正则