【问题标题】:React Native error - React: createElement: type should not be nullReact Native 错误 - React: createElement: type 不应该为 null
【发布时间】:2017-03-30 05:14:58
【问题描述】:

我正在使用 nativebase 作为我正在开发的 React Native 应用程序的 UI 端的基础,但我遇到了一个应该非常简单的错误。

我想为应用的标签页脚创建一个组件,以包含在不同的视图中,如下所示:

./Components/Footer.js

import React, { Component } from 'react';
import {
  Footer,
  FooterTab,
  Button,
  Icon,
  Text
} from 'native-base';

class TabFooter extends Component {
  render() {
    return (
      <Footer >
        <FooterTab>
          <Button>
            <Badge>2</Badge>
            Apps
            <Icon name='ios-apps-outline' />
          </Button>
          <Button>
            Camera
            <Icon name='ios-camera-outline' />
          </Button>
          <Button active>
            Navigate
            <Icon name='ios-compass' />
          </Button>
          <Button>
            Contact
            <Icon name='ios-contact-outline' />
          </Button>
        </FooterTab>
      </Footer>
    );
  }
}

export default TabFooter;

一个示例视图是:

import React, { Component } from 'react';
import { Container, Header, Title, Content, Footer, FooterTab, Button, Icon,
  Text, List, ListItem, Input, InputGroup } from 'native-base';
import { TabFooter } from '../Components/Footer';

class EditGuest extends Component {
  render() {

    return (
      <Container>
        <Header>
          <Title>Whatever title</Title>
        </Header>

        <Content>
        </Content>
        <TabFooter />
      </Container>
    );
  }
}

export default EditGuest;

但是当这个视图呈现时,我得到了错误:

ExceptionsManager.js:82 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). Check the render method of `EditGuest`.

我是否缺少一些真正基本的东西,因为我认为我可以简单地将这个组件包含在任何视图中而没有任何问题...

【问题讨论】:

标签: javascript react-native react-jsx native-base


【解决方案1】:

由于您正在执行default 导出,您应该从您的import 中删除{}

import TabFooter from '../Components/Footer';

Why es6 react component works only with "export default"?

【讨论】:

  • 好的!更近一步......这消除了错误,但没有渲染。还有什么让我做错的事情吗?谢谢你的资源,我会读一读。
  • @oldo.nicho 您似乎缺少Badge 的导入,但这应该会引发错误...
【解决方案2】:

myFooter.js

import React, { Component } from 'react';
import { Footer, FooterTab, Button, Icon, Badge } from 'native-base';

class TabFooter extends Component {
  render() {
    return (
      <Footer>
        <FooterTab>
          <Button>
            <Badge>2</Badge>
            Apps
            <Icon name="ios-apps-outline" />
          </Button>
          <Button>
            Camera
            <Icon name="ios-camera-outline" />
          </Button>
          <Button active>
            Navigate
            <Icon name="ios-compass" />
          </Button>
          <Button>
            Contact
            <Icon name="ios-contact-outline" />
          </Button>
        </FooterTab>
      </Footer>
    );
  }
}

export default TabFooter;

EditGuest.js

import React, { Component } from 'react';
import { View } from 'react-native';
import { Container, Header, Title, Content } from 'native-base';
import TabFooter from './myFooter';

class EditGuest extends Component {

  render() {
    return (
      <Container>
        <Header>
          <Title>Whatever title</Title>
        </Header>

        <Content />

        <View>
          <TabFooter />
        </View>
      </Container>
    );
  }
}

export default EditGuest;

截图

【讨论】:

  • 谢谢@Supriya!嗯,所以我所要做的就是将&lt;TabFooter /&gt; 组件包装在&lt;View&gt; 组件中。奇怪……这是为什么呢?
  • 是的,我也有同样的问题。无论如何,你都可以在 NativeBase GitHub 上提出这个问题。
  • 您的问题已在此处得到解答 - stackoverflow.com/questions/39839573/…
  • 很好,谢谢。只要我知道如何解决这个问题,一切都很好。我会在 GitHub 上提出一个问题。
【解决方案3】:

尝试改变:

import { TabFooter } from '../Components/Footer';

import TabFooter from '../Components/Footer';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多