2016-02-03 11 views
8

ho campi dipendenti come questoCome usare Select2 con Reactjs?

<List> 
    <select> 
     <option></option> 
     <option></option> 
    </select> 
    <select> 
     <option></option> 
     <option></option> 
    </select> 
    <input /> 
    </List> 

Se dovessi 5 <List/> components.How fare aggiungo Select2 ad ogni component.I Googled online.But non abbiamo trovato nessuna soluzione di lavoro.

Code below for react-select.Getting error TypeError: event.target is undefined.

var React = require('react'); 
var ReactDOM = require('react-dom'); 
var Select = require('react-select'); 

var Page = React.createClass({ 

    getInitialState: function() { 
     return { 
      firstValue: '' 
     } 
    }, 

    handleFirstLevelChange : function (event) { 
     this.setState({ 
      firstValue: event.target.value 
     }); 
    }, 
    render : function(){ 

     var options = [ 
      { value: '', label: 'Select an option' }, 
      { value: 'one', label: 'One' }, 
      { value: 'two', label: 'Two' } 
     ]; 

     return (<Select 
      value={this.state.firstValue} 
      options={options} 
      onChange={this.handleFirstLevelChange} 
      />) 
    } 
}); 

ReactDOM.render(<Page />, document.getElementById('root')); 
+0

Ho provato ad aggiungere select2 nella pagina html e ho usato questo snippet. Ma ha cambiato solo il primo elemento select. I campi di selezione dipendenti erano invariati.

+0

Questo è utile per il wrapping di librerie jQuery in React, in generale: https://github.com/ryanflorence/react-training/blob/gh-pages/lessons/05-wrapping-dom-libs.md – mik01aj

risposta

4

Dal momento che si sta utilizzando Reagire, si sarebbe meglio alla ricerca di Reagire componenti piuttosto che i plugin jQuery. È possibile utilizzare per eaxmple react-select, che è molto simile a Select2.

+1

Ma io Ho bisogno di una soluzione per Select2 perché attualmente sto usando la mia applicazione. –

+0

@Vishwasraj hai ottenuto la soluzione mi ha spezzato la testa per questo :( – Vikram

+0

@Vikram nessuna soluzione trovata.changed per materializzare libreria css. [Link] (http://materializecss.com/) alla libreria –

10

Stiamo usando this wrapper, ma ci sono troppi problemi intorno ad esso.

Prima di tutto, non è possibile testare il codice in cui viene utilizzato in NodeJS, a causa di this issue. In secondo luogo abbiamo avuto problemi con l'inizializzazione di vari componenti select2 tramite il parametro defaultValue. Solo uno (a caso) di questi elementi era initalizzato.

Quindi andiamo a scaricarlo e sostituire con react-select presto.

MODIFICA: Abbiamo sostituito react-select2-wrapper con react-select. Funziona alla grande per noi.

+0

even react- selezionare ha problemi.Non posso impostare lo stato.Se provo a impostare lo stato il menu a discesa non si chiude. –

+0

Hmm non sono sicuro.Non abbiamo provato fino ad ora. Supponiamo di essere molto configurabile. c'è qualche bandiera nei documenti? – luboskrnac

+0

handleFirstLevelChange: function (event) { this.setState ({ firstValue: event.target.value }); } Ottengo TypeError: evento.l'obiettivo non è definito –

5

Se stai usando refs [docs], è possibile accedere al nodo tramite il suo attributo refs nella funzione componentDidMount e passare che a select2():

var Select = React.createClass({ 
    handleChange: function() { 
    this.prop.onChange(
     this.refs.myRef.value 
    ); 
    }, 

    componentDidMount: function() { 
    // Call select2 on your node 
    var self = this; 
    var node = this.refs.myRef; // or this.refs['myRef'] 
    $(node) 
     .select2({...}) 
     .on('change', function() { 
     // this ensures the change via select2 triggers 
     // the state change for your component 
     self.handleChange(); 
     }); 
    }, 

    render: function() { 
    return (
     <select 
     ref="myRef" 
     onChange={this.handleChange}> 
     // {options} 
     </select> 
    ); 
    } 
}); 

non credo che questo è il modo "Reagire, "ma questo può aiutare se non si desidera utilizzare react-select o qualche altro strumento.