React ES6 导入无状态组件

React ES6 importing a stateless component

本文关键字:状态 组件 导入 ES6 React      更新时间:2023-09-26

我一直在寻找这个永远的答案,哈哈。 如何将无状态反应类导入另一个类?我收到错误:

"警告.js:45警告:HTMLImageElement(...):在返回的组件实例上找不到render方法:您可能忘记定义render,从无状态组件返回null/false,或尝试呈现类型为不是React组件的函数的元素。

我正在尝试导入标注图像组件。

import React from 'react';
import ReactDOM from 'react-dom';
export class CalloutImage extends React.Component {
    constructor(props) {
        super(props)
        this.handleClick = this.handleClick.bind(this)
    }
    render() {
        return (
            <Image onClick={this.handleClick} className="header-img" src="https://images.unsplash.com/photo-1453106037972-08fbfe790762?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=cbaaa89f2c5394ff276ac2ccbfffd4a4" />
        )
    }
    handleClick() {
        alert();
    }
}

到。。。。

import { CalloutImage } from './CalloutImage.jsx'
const lorem = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
class App extends React.Component {
    render() {
        return (
            <div>
                <Navigation />
                <Grid>
                    <CalloutImage />
                    <ColumnContent />
                </Grid>
                <Footer />
            </div>
        ) 
    }
}
class Navigation extends React.Component {
    render() {
        return (
            <Navbar inverse>
                <Navbar.Header>
                    <Navbar.Brand>VA</Navbar.Brand>
                    <Navbar.Toggle />
                </Navbar.Header>
                <Navbar.Collapse>
                    <Nav>
                        <NavItem eventKey={1} href="#">Home</NavItem>
                        <NavItem eventKey={2} href="#">About</NavItem>
                        <NavItem eventKey={3} href="#">Users</NavItem>
                    </Nav>
                </Navbar.Collapse>
            </Navbar>
        )
    }
}
class ColumnContent extends React.Component {
    render() {
        return (
            <Row>
                <Col sm={6}>
                    <h2>Heading 2</h2>
                    <p>{lorem}</p>
                </Col>
                <Col sm={6}>
                    <h2>Heading 2</h2>
                    <p>{lorem}</p>
                </Col>
            </Row>
        )
    }
}


class Footer extends React.Component {
    render() {
        return (
            <footer>
                <Grid>
                    <p>VA &copy;</p>
                </Grid>
            </footer>
        )
    }
}
ReactDOM.render(<App />, document.getElementById('app'))

Image应该是小写的,否则 React 会认为它是一个 React 组件并尝试在其上调用 render()

在 React JSX 中,如果您使用的是 HTML tags ,那么它应该是lowercase 。对于所有其他用户定义的组件或从外部包导入的任何其他组件,应始终Capitalized

在代码中,由于使用的是react-bootstrap <Image />组件,因此应将该组件导入到文件中,然后使用它。