你如何在React Native中使用JSX?
var MyScreen = require('./ apps / screens / LoadingScreen');
这种方式需要.js文件,但找不到.jsx文件。
答案 0 :(得分:2)
我认为您可能只需将文件从.jsx重命名为.js,构建过程将负责任何转换。科林的答案似乎证实了这一点。
.js文件中的JSX示例显示在http://moduscreate.com/react-native-has-landed/中。
React团队继续鼓励使用JSX:http://facebook.github.io/react/docs/jsx-in-depth.html。
答案 1 :(得分:1)
以下是我通过快速黑客解决它的方法:
打开[YOU_PROJECT_FOLDER]/node_modules/react-native/packager/react-packager/src/DependencyResolver/DependencyGraph/index.js
并编辑第55行,看起来像这样
extensions: extensions || ['jsx', 'js', 'json'],
打开[YOU_PROJECT_FOLDER]/node_modules/react-native/packager/react-packager/src/DependencyResolver/DependencyGraph/ResolutionRequest.js
,然后在第333行添加以下两行:
} else if (this._fastfs.fileExists(potentialModulePath + '.jsx')) {
file = potentialModulePath + '.jsx';
当您执行mymodule.jsx
require("mymodule")
个文件
注意:实际行来自最新的0.17版本,在其他版本中行可能不同
答案 2 :(得分:0)
我可能错了,但在浏览源代码后,看起来只支持js
和json
:
this._moduleExtPattern = new RegExp(
'\.(' + ['js', 'json'].concat(this._assetExts).join('|') + ')$'
);
这个问题似乎支持:
答案 3 :(得分:0)
要使用 jsx 文件,我必须将jsx
扩展名添加到下一个文件
node_modules/react-native/packager/react-packager/src/node-haste/index.js
第148行
extensions: extensions || ['js', 'jsx', 'json']
然后更改文件
node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/ResolutionRequest.js
最后这是第447行
} else if (this._platform != null &&
this._fastfs.fileExists(potentialModulePath + '.' + this._platform + '.jsx')) {
file = potentialModulePath + '.' + this._platform + '.jsx';
这是第457行
} else if (this._fastfs.fileExists(potentialModulePath + '.jsx')) {
file = potentialModulePath + '.jsx';
此解决方案适用于最新的0.39版本