javascript - 我的主要组件的定义中的“元素类型无效:需要一个字符串”:export const Autocomplete = (props) => {....}
问题描述
我是新来的反应。
我的主要组件是这样定义的:
import React from "react";
import { useState } from "react";
export const Autocomplete = (props) => {
return (
<div className="wrapper">
hello
</div>
);
};
我收到此错误:
元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
这是我的 index.js
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<StrictMode>
<App /> <!--my main component-->
</StrictMode>,
rootElement
);
我究竟做错了什么?谢谢
解决方案
回答
您已将主组件命名为名为 的导出Autocomplete
,但您正在导入一个名为 的默认组件App
。
尝试这个:
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import { Autocomplete } from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<StrictMode>
<Autocomplete /> <!--my main component-->
</StrictMode>,
rootElement
);
解释命名与默认导出
有两种导出方式,每种方式都需要您以不同的方式导入导出的成员。
命名导出/导入
命名导出必须使用与导出成员相同的名称导入。导入还将在导入的成员周围使用大括号。您可以从单个文件中导出多个成员。
foobar.js
export const foo = 'foo';
export const bar = 'bar';
const baz = 'baz';
// or
const foo = 'foo';
const bar = 'bar';
const baz = 'baz';
export {foo, bar};
main.js
import { foo, bar } from './foobar'
默认导出/导入
可以使用您想要的任何名称导入默认导出。导入周围不会有大括号。您只能默认从文件中导出单个成员。
foobar.js
export default {foo: '', bar: ''}; // directly exporting the value (an object), no variable declaration involved
// or
const foobar = {foo: '', bar: ''};
export default foobar;
main.js
import foobar from './foobar';
const foo = foobar.foo;
const bar = foobar.bar;
// or
import whatever from './foobar';
const foo = whatever.foo;
const bar = whatever.bar;
命名和默认导出/导入
您还可以从同一个文件中同时拥有默认导出和命名导出。你可能已经在 React 中看到了这一点。
foobar.js
export const foo = 'foo';
export const bar = 'bar';
export default foobar = 'foobar';
main.js
import myFoobar, { foo, bar } from './foobar'
import React, { useState } from 'react';
推荐阅读
- geolocation - 在显示逻辑 Qualtrics 中使用 GeoIP 位置
- laravel - 不工作 @extends() 在 laravel 中使用查询
- node.js - POST http://localhost:3000/api/signup/ 404(未找到)
- javascript - 从 VueJ 中的对象数组中对唯一对象及其值进行分组
- javascript - 从另一个函数识别变量
- c# - 是否有可能使用 OAuth 1.0 发送带有正文的帖子?
- python - 使用 Python 更快地计算箱数代码
- c# - 我应该使用哪种桌面应用程序架构模式?
- android - 如何使用android存储访问框架正确覆盖文件内容
- presto - 计算不同列的 MAX 值的问题