Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React JSX类库导出不工作_Reactjs_Webpack_Jsx_Babeljs - Fatal编程技术网

Reactjs React 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

我正处于将一个非jsx React项目迁移到jsx的早期阶段,并努力使其工作

我已经设法创建了一个简单的JSX组件,在从index.JSX文件创建时可以工作,但我正在尝试与现有代码集成,我想首先将“遗留”React类与我的新JSX类结合起来

我的Dropdown.jsx代码如下所示:

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).