我正在构建一个反应本机项目,我收到以下错误:
错误:元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件),但得到:对象。您可能忘记从定义它的文件中导出组件,或者您可能混淆了默认导入和命名导入。
检查 的渲染方法
SignInScreen。
这是我的代码。
import React from 'react';
import { View,Image,StyleSheet,useWindowDimensions } from 'react-native';
import Logo from'../../../assetss/images/logo.png';
import CustomInput from '../../components/CustomInput';
const SignInScreen = () => {
const {height} = useWindowDimensions();
return (
<View style= {styles.root}>
<Image source={Logo} style ={[styles.logo, {height: height * 0.3}]}
resizeMode="contain" />
<CustomInput />
</View>
);
};
const styles = StyleSheet.create({
root: {
alignItems: 'center',
padding: 20,
},
logo:{
width: 1000,
maxWidth: 1100,
maxHeight: 200 ,
}
})
export default SignInScreen
Run Code Online (Sandbox Code Playgroud)
Dav*_*olz 40
named exports和之间是有区别的default exports。
命名导出
可用于模块的顶级值,例如
export const fetch = () => {
}
export const Component = () => {
return <></>
}
Run Code Online (Sandbox Code Playgroud)
以上可以使用导入
import { fetch, Component } from "./MyModule"
Run Code Online (Sandbox Code Playgroud)
注意花括号。
默认导出
默认导出每个文件只能使用一次,例如
const Component = () => {
return <></>
}
export default Component;
Run Code Online (Sandbox Code Playgroud)
以上可以使用导入
import Component from "./MyModule"
Run Code Online (Sandbox Code Playgroud)
请注意,我们在这里没有使用花括号。
错误信息
错误:元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件),但得到:对象。您可能忘记从定义它的文件中导出组件,或者您可能混淆了默认导入和命名导入。
告诉我们我们在一些进口产品中混用了这一点。您的导入 和View, Image, StyleSheet是useWindowDimensions正确的。因此,要么CustomInput要么Logo没有正确导入(或导出;这取决于我们希望如何查看它)。
你假设default exports两者。检查它们是否使用 导出default export。
如果您不想使用默认导出,则需要将导入语句更改为以下内容。
import { CustomInput } from '../../components/CustomInput';
Run Code Online (Sandbox Code Playgroud)
此外,检查导入路径(例如'../../../assetss/images/logo.png'和'../../components/CustomInput')是否正确。
小智 9
就我而言,问题是我创建了所有组件但没有保存文件。我不使用自动保存,因此我创建了所有组件,将它们导入到我的 Home 组件中,但它们没有保存,因此引发了错误。一旦我保存了每个文件,错误就消失了。
在反应中进行单元测试时面临
使用 jest 和 React-testing-library 编写单元测试用例时注意到同样的问题。
问题:这可能是由于使用 jest.mock 模拟组件的错误方式造成的
问题情况:
jest.mock('./components/notes-list', () => {
return {
NotesList: () => <div data-testid='note-list-component'>Hello World</div>,
};
});
Run Code Online (Sandbox Code Playgroud)
解决方案
jest.mock('./components/notes-list', () => {
const NotesList = () => (
<div data-testid='note-list-component'>Hello World</div>
);
return NotesList;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232948 次 |
| 最近记录: |