2016-04-20 3 views
0

Я искал ответ на этот вечный lol. Как импортировать класс реагирования без учета состояния в другой класс? Я получаю сообщение об ошибке:React ES6 импортирует компонент без гражданства

«warning.js: 45Warning: HTMLImageElement (...): Нет render метода найденного на возвращаемом экземпляре компонента: возможно вы забыли определить render, возвращается нулем/лжи от лица без компонента , или попытался отобразить элемент, тип которого является функцией, которая не является компонентом React. "

Я пытаюсь импортировать компонент CalloutImage ....

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')) 
+0

попробуйте этот 'import CalloutImage from './CalloutImage.jsx'', если ваш CalloutImage.jsx просто возвращает один компонент. –

+0

@ShubhamKhatri это не сработает, потому что 'CalloutImage' - это обычный экспорт, а не экспорт' default'. – bcherny

ответ

3

Image должны быть в нижнем регистре, в противном случае Реагировать считает, что это Реагировать компонент и пытается позвоните по телефону render().

+0

lol wait, вы должны шутить. Я также использую реакцию-бутстрап, и у них есть компонент изображения, который я использовал, так что не должно ли оно быть прописным? – ryan

+1

Если это то, что вы используете, обязательно импортируйте компонент. – bcherny

0

В React JSX, если вы используете HTML tags, тогда это должно быть lowercase. Для всех других пользовательских или любых других импортированных компонентов из внешних пакетов всегда должно быть Capitalized.

В вашем коде, поскольку вы используете <Image /> компонент от react-bootstrap, вы должны импортировать этот компонент в свой файл, а затем использовать его.