Reactjs React JSX类库导出不工作
我正处于将一个非jsx React项目迁移到jsx的早期阶段,并努力使其工作 我已经设法创建了一个简单的JSX组件,在从index.JSX文件创建时可以工作,但我正在尝试与现有代码集成,我想首先将“遗留”React类与我的新JSX类结合起来 我的Dropdown.jsx代码如下所示:Reactjs React JSX类库导出不工作,reactjs,webpack,jsx,babeljs,Reactjs,Webpack,Jsx,Babeljs,我正处于将一个非jsx React项目迁移到jsx的早期阶段,并努力使其工作 我已经设法创建了一个简单的JSX组件,在从index.JSX文件创建时可以工作,但我正在尝试与现有代码集成,我想首先将“遗留”React类与我的新JSX类结合起来 我的Dropdown.jsx代码如下所示: class Dropdown extends React.Component { constructor(props) { super(props); this.state
class Dropdown extends React.Component {
constructor(props) {
super(props);
this.state = {
value: null,
};
}
render() {
return <div>
<select name="carlist" form="carform">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</div>;
}
}
export default Dropdown;
为了解决这个问题,我做了大量的研究,最后一次是在配置文件中添加“library”和“libraryTarget”设置
脚本似乎在识别下拉类(也就是说,它没有因为类未找到类型错误而失败),但我得到了以下结果:
Warning: React.createElement: type should not be null, undefined, boolean, or number.
It should be a string (for DOM elements) or a ReactClass (for composite components).
我知道这个类在从index.jsx文件实例化时可以工作
import React from 'react';
import ReactDOM from 'react-dom';
import Dropdown from './Dropdown';
ReactDOM.render(
<Dropdown />,
document.getElementById('app')
);
export default Dropdown ;
从“React”导入React;
从“react dom”导入react dom;
从“./Dropdown”导入下拉列表;
ReactDOM.render(
,
document.getElementById('app')
);
导出默认下拉列表;
我是否以错误的方式进行迁移我本以为我可以将旧的React代码与JSX输出混合匹配
提前多谢Webpack的一点是,您创建的类是从外部世界正确封装的。您正在得到的错误
Warning: React.createElement: type should not be null, undefined, boolean, or number.
It should be a string (for DOM elements) or a ReactClass (for composite components).
当react在任何地方都找不到类声明时,react出现错误。虽然我建议您按照正确的方法在index.jsx文件中实例化它,但您仍然可以通过在Dropdown.jsx中执行此hack来实现这一点
window.Dropdown=下拉菜单
这将确保您的外部非网页包编译javascript可以看到下拉类。但这是一个糟糕的习惯,我真的建议您坚持使用index.jsx文件,因为它可以防止您从全局名称空间中暴露您的类和库,这是一种最佳做法。您是否在Dropdown.jsx中导入了React?我知道这很明显,但只想确认文件顶部没有显示bcoz try import React从“React”导入React;谢谢你,皮尤斯。我没有,但它在运输时没有抱怨。我已经添加了导入。现在可以了吗?我的建议对你有帮助吗?如果是,请让我知道我将创建一个答案,然后你接受它谢谢你。我知道这不是最佳实践,但我正在尝试将一些新代码合并到现有的“旧式”React项目中。它不使用JSX。我尝试了你的建议,在下拉式类定义的末尾添加了你建议的行。我可以看到bundle文件中的新行,如果我打断bundle文件,我可以看到它正在执行该行,但是我仍然从createElement()中得到相同的错误。我向Maru道歉-我删除了库:“Dropdown”,库目标:“umd”,网页包配置中的行,它可以工作!非常感谢!
import React from 'react';
import ReactDOM from 'react-dom';
import Dropdown from './Dropdown';
ReactDOM.render(
<Dropdown />,
document.getElementById('app')
);
export default Dropdown ;
Warning: React.createElement: type should not be null, undefined, boolean, or number.
It should be a string (for DOM elements) or a ReactClass (for composite components).