javascript - 使用 JSX 导入 React 组件
问题描述
使用 JXS 导入反应组件时出现问题。组件是从库中导入的(像 SDK 一样使用)。
/sdk/dist/js/app.js
import React, { Component } from 'react';
export default class Test extends Component {
render() {
return <div>Hello</div>;
}
}
有一个使用这个 SDK 的项目,有 webpack / babel 已经做了一个构建,这个组件的导入文件如下所示:
应用程序/js/index.js
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import Test from 'sdk/dist/js/App';
但!如果满足以下条件,一切都会奏效:
- 我们从这个组件中移除 JSX
应用程序/js/index.js
import React, { Component } from 'react';
export default class Test extends Component {
render() {
return React.createElement(
"div",
null,
"Hello"
);
}
}
- 直接删除导入和插入组件。
应用程序/js/index.js
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class Test extends Component {
render() {
return <div>Hello</div>;
}
}
问题是它需要通过导入来工作。我建议问题在于 webpack 没有转置导入的文件 - 并按原样读取它......
网络包:
{
entry: './app/js/index.js',
output: {
path: resolve(__dirname, plConfig.paths.public.root),
filename: "[name].js"
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: [
{
loader: "babel-loader",
options: {
cacheDirectory: true
}
}
]
}
]
}
.babelrc:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
解决方案
你需要一个 babel 插件来转换 jsx ......
@babel/plugin-transform-react-jsx
安装
npm i -D @babel/plugin-transform-react-jsx
在 .babelrc 中使用
{
presets: [ ... ],
plugins: [ "@babel/plugin-transform-react-jsx", ...other plugins ]
}
编辑:
您还需要为 jsx 添加 babel 规则...在您的webpack模块规则中...
更改test: /\.js$/
为test: /\.jsx?$/
推荐阅读
- reactjs - 反应 JSON 数组顺序
- javascript - BAD Reuqest 无法创建和填充列表类型 Microsoft.AspNetCore.Http.IFormFileCollection
- php - 即使使用准备好的语句,PDO 也不处理字段数据中的撇号
- bash - 清除/截断在 linux 上工作但在 mac 上不工作的 Kafka 主题
- python - 这个scrapy请求没有回调
- machine-learning - AttributeError:“NoneType”对象没有属性“predict_classes”
- javascript - 仅模拟 Angular 服务的一种方法
- mysql - 在 MySQL 中限制多个 id 仅显示 2 行
- javascript - 表格中奇怪的最后一行
- dart - 缓存数据并将缓存数据提供给 StreamBuilder Flutter