开发者问题收集

Reactnative 错误 - 预期一个字符串或一个类/函数但得到:未定义

2017-09-03
678

当我尝试定义自己的自定义组件时,我遇到了此错误。

// /common/MyAppText.js
import React, {Component} from 'react';
import {
  Text,
  View,
} from 'ReactNative';

class MyAppText extends Component {
  render(){
    return (
      <View>
        <Text>hello</Text>
      </View>
    )
  }
}

export default MyAppText

在另一个应用程序上,我尝试导入它并通过

import MyAppText from './common/MyAppText'
class Home extends Component {
  render(){
    return (
      <View>
        <MyAppText />
      </View>
    )
  }
}

使用它,但我遇到了错误“预期为字符串或类/函数,但得到:未定义,请检查'MyAppText'的渲染方法。有人能看到导出语法有什么问题吗?

如果我在同一个文档中定义所有内容,那么它就可以正常工作,所以这是我无法弄清楚的导出问题。

1个回答

您自己的导出/导入看起来不错。不确定这是否是问题所在,但行

import {..} from 'ReactNative';

应该是:

import {..} from 'react-native';

您可能希望它因其他错误(未找到模块)而崩溃,但由于 此内部 React Native 文件 通过 Haste 导出全局可用模块“ReactNative”,您的导入最终会选择该文件。由于该文件不导出属性 ViewText ,因此代码编译正常,但最终出现未定义的变量。

编辑以获取更多上下文

React Native 打包器(称为 Metro )使用 Facebook 自己的模块系统(称为 Haste),它允许任何人使用注释 @providesModule Name 修饰文件,然后只需使用 import ... from 'Name'; 即可从全局任何地方导入它

其中一个内部渲染器模块声明 @providesModule ReactNative 。因此,当您导入 from 'ReactNative' 时,您会得到该模块,而不是构建错误。

jevakallio
2017-09-03