2017-02-14 2 views
2

http://codepen.io/JessieZhou/pen/VPgMdP, Voici une démo utilisant React dans CodePen, mais le navigateur donne une erreur "Uncaught ReferenceError: Component is not defined". Cependant, si j'insère une ligne "import {Component} de 'react'" dans la première ligne, l'erreur sera "Uncaught ReferenceError: require n'est pas défini". Est-il possible que l'utilisation de «classe» provoque ce problème?comment utiliser réagir dans Codepen avec es6

Voici mon code:

//import {Component} from 'react' 
class MyInput extends Component{ 
    constructor(props){ 
    super(props); 
    this.handleChange = this.handleChange.bind(this); 
    } 

    handleChange(e){ 
    this.props.update(e.target.value); 
    } 

    render(){ 
    return <input onChange={this.handleChange} type="text"/> 
    } 
} 
ReactDOM.render(MyInput, document.getElementById('myinput')); 

Voici mes paramètres javascript dans CodePen: javascript settings in codepen

Répondre

4

La raison est le composant fait partie de React, d'accès que vous devez utiliser React.Component, si vous voulez directement utiliser le composant, puis d'abord l'importer à partir react, comme ceci:

import {Component} from 'react'; 

utilisez cette :

class MyInput extends React.Component{ 
    constructor(props){ 
    super(props); 
    this.handleChange = this.handleChange.bind(this); 
    } 

    handleChange(e){ 
    console.log('e', e.target.vaule); 
    } 
    render(){ 
    return <input onChange={this.handleChange} type="text"/> 
    } 
} 
ReactDOM.render(<MyInput/>, document.getElementById('myinput')); 

Vérifier codepen

+0

Merci beaucoup! Utiliser React.Component fonctionnera, mais si je veux utiliser Component, "import {Component} de 'reag'" ne fonctionne toujours pas, l'erreur est "Uncaught ReferenceError: require n'est pas défini" ... – JessieZhou

+0

utilise cette ligne Notre projet fonctionnera, dans le codepen, nous utilisons des liens lib, c'est pourquoi nous devons utiliser React.Component. –

1

Component est une sous-classe de réagir. Donc soit vous l'importez, soit vous utilisez React.Component Pendant le rendu, vous devez utiliser jsx MyInput ne fonctionnera pas. <MyInput/> travaillera

class MyInput extends React.Component{ 
    constructor(props){ 
    super(props); 
    this.handleChange = this.handleChange.bind(this); 
    } 

    handleChange(e){ 
    this.props.update(e.target.value); 
    } 
    render(){ 
    return <input onChange={this.handleChange} type="text"/> 
    } 
} 
ReactDOM.render(<MyInput/>, document.getElementById('myinput')); 
1

Vous pouvez faire class MyInput extends React.Component ou passer à Webpackbin

+0

Merci beaucoup ~ Je vais essayer Webpackbin plus tard ~ – JessieZhou

0

Vous devez étendre React.Component, non seulement Component.

Et vous devez rendre <MyInput /> au lieu de MyInput.

Essayez plutôt

class MyInput extends React.Component{ 
    constructor(props){ 
    super(props); 
    this.handleChange = this.handleChange.bind(this); 
    } 

    handleChange(e){ 
    this.props.update(e.target.value); 
    } 
    render(){ 
    return <input onChange={this.handleChange} type="text"/> 
    } 
} 

ReactDOM.render(<MyInput />, document.getElementById('myinput'));