2016-09-20 4 views
1

Что не так с моим кодом? Я не вижу ошибки в консоли jsbin.React hello world не работает с ES6

http://jsbin.com/susumidode/edit?js,console,output

Class secondComponenent extends React.Component { 
    render(){ 
    return (
     <p>My id is: {this.props.id}</p> 
    ); 
    } 
} 


React.render(
    <secondComponenent id="abc">, 
    document.getElementById('react_example') 
); 

А также как сделать несколько компонент в React.render()?

+1

Имена классов должны начинаться с прописной буквы. –

+0

http://imgur.com/a/KuPUr – Quentin

+0

@Whitcik, что не решает проблему – dfox

ответ

2

Было несколько незначительных синтаксических ошибок, удерживающих вас. Нижний регистр для класса, верхний регистр для именования компонента и закрытие компонента, который нужно визуализировать. Этот код ниже работает в вашем JSBin.

class SecondComponent extends React.Component { 
    render(){ 
    return (
     <p>My id is: {this.props.id}</p> 
    ); 
    } 
} 


React.render(
    <SecondComponent id="abc" />, 
    document.getElementById('react_example') 
); 
0

Если вы хотите использовать опоры, вам может понадобиться конструктор (см. Комментарии ниже этого ответа).

import React, { Component } from 'react'; 
import { render } from 'react-dom'; 

class SecoundComponent extends Component { 
    constructor(props) { 
    super(props); 

    this.props = props; 
    } 

    render() { 
    return (
     <p>My id is: {this.props.id}</p> 
    ) 
    } 
} 

render(<SecoundComponent id="123" />, document.getElementById('react_example')); 

Также обратите внимание, что я назвал класс SecoundComponent с капиталом С.

+0

Это неправда. Вы должны использовать конструктор для использования 'this.state', но реквизиты применяются автоматически. –

+0

Вы правы, @JoshuaComeau, но если вы хотите использовать реквизит внутри конструктора, вам нужно будет использовать 'super (props)'. См. Http://codepen.io/tomekbuszewski/pen/XjNWqq?editors=0010 –

+0

True. Если вы определяете свой собственный конструктор, вам нужно убедиться, что исходный конструктор 'Component' по-прежнему получает реквизиты. В противном случае ваш конструктор перезапишет исходный, и 'this.props' никогда не будет установлен. –

2

Во-первых, вы должны использовать ReactDOM, чтобы сделать свой компонент в браузер не React. Вы код:

React.render(
    <secondComponenent id="abc" />, 
    document.getElementById('react_example') 
); 

Но в последних версиях React (выше 0,14), оно должно быть:

ReactDOM.render(
    <secondComponenent id="abc" />, 
    document.getElementById('react_example') 
); 

Чтобы сделать его работу вы можете добавить в свой library HTML.

Во-вторых, вы должны закрыть свой компонент, если у него нет дочерних компонентов: <secondComponent id="abc" />, ваше письмо: <secondComponent id="abc">.

Для того, чтобы сделать несколько компонентов реакции, вы должны обернуть их с помощью одного родительского компонента, например, как это:

ReactDOM.render(
    <div> 
     <firstComponenent id="abc" /> 
     <secondComponenent id="abc" /> 
    </div>, 
    document.getElementById('react_example') 
); 

P.S: Так же, как @ alexi2 говорит: class SomeComponent не Class SomeComponent.

+0

нет, responseDOM не требуется, посмотрите http://jsbin.com/cuneha/1/edit?js,output – dfox

+0

Да, вы правы, это не нужно, если 'реакция' версии ниже' 0.14'. Но с последними версиями вы все равно должны использовать 'ReactDOM'. Может быть, помогает: http://stackoverflow.com/questions/33007402/is-there-any-difference-between-react-render-and-reactdom-render. – sehrob

+0

спасибо не знал, что! – dfox

Смежные вопросы