2015-01-07 17 views
14

Sto cercando di utilizzare componenti React.js senza JSX e ricevere tale avvertimento:React.js senza JSX - "Attenzione: Qualcosa sta chiamando un Reagire direttamente componente Utilizzare una fabbrica o JSX, invece."

Warning: Something is calling a React component directly. Use a factory or JSX instead. See: http://fb.me/react-legacyfactory

ho visitato link, ma ha suggerito createFactory soluzione non mi ha aiutato:/

app.js

var React = require('react/addons'); 
var TagsInput = React.createFactory(require('./tagsinput')); // no luck 

var TagsComponent = React.createClass({ 
    displayName: "TagsComponent", 
    saveTags: function() { 
    console.log('tags: ', this.refs.tags.getTags().join(', ')); 
    }, 

    render: function() { 
    return (
     React.createElement("div", null, 
     React.createElement(TagsInput, {ref: "tags", tags: ["tag1", "tag2"]}), 
     React.createElement("button", {onClick: this.saveTags}, "Save") 
    ) 
    ); 
    } 
}); 

React.render(React.createElement(TagsComponent, null), document.getElementById('tags')); 

tagsinput.js

https://raw.githubusercontent.com/olahol/react-tagsinput/master/react-tagsinput.js

io non riesco a capire qual è il problema?

risposta

25

React.createClass(spec) restituisce un componente.

React.createElement(component, props, ...children) crea un elemento .

React.createFactory(component) restituisce una fabbrica funzione di , che può essere utilizzato per creare un elemento .

React.createFactory(a)(b, c, d) è lo stesso di React.createElement(a, b, c, d).

Si ottiene l'avviso quando si chiama un componente direttamente, come component(). Se si desidera chiamare come una funzione, utilizzare createFactory

var factory = React.createFactory(component); 
var element = factory(props, ...children); 

Oppure utilizzare createElement:

var element = React.createElement(component, props, ...children); 

In 0,13 questo vi darà un errore invece di un avvertimento:

var element = component(props, ...children); 

anche poiché React.DOM sta andando via, è necessario creare dom elementi nello stesso modo in cui si crea il componente basato elementi

Modifica: sembra che React.DOM si aggiri per ora.

var div = React.createFactory('div'); 
var element = div(props, ...children); 

// or 

var element = React.createElement('div', props, ...children); 

Bold utilizzato per mostrare termini omogenei....children significa un numero qualsiasi di argomenti figlio

+0

grazie, risposta molto informativa! – Kosmetika

+0

Che dire di 'component.type (component.props)' restituisce un elemento? C'è un modo approvato per farlo? – jedmao

2

Hai bisogno di avvolgere tutti i componenti figlio in createFactory così, sono stato in grado di ottenere il codice per eseguire senza che l'avvertimento specifico avvolgendo Tag e Input in createFactory.

jsbin

+0

Ho usato per risolvere questo problema con l'inserimento di 'Tag' e' Input' in 'React.createElement'. – Kosmetika

Problemi correlati