2016-02-03 8 views
8

मैं इसReactjs के साथ Select2 का उपयोग कैसे करें?

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

तरह निर्भर क्षेत्रों है, तो मैं 5 <List/> components.How था मैं जोड़ने Select2 प्रत्येक component.I के लिए googled online.But किसी भी काम कर समाधान नहीं मिल सका है।

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

मैंने HTML पृष्ठ में select2 जोड़ने का प्रयास किया और इस स्निपेट का उपयोग किया। लेकिन यह केवल पहला चयन तत्व बदल गया। निर्भर चुनिंदा फ़ील्ड अपरिवर्तित थे। <स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट"> $ ('चयन करें') चुनें 2(); –

+0

यह सामान्य रूप से प्रतिक्रिया में jQuery libs को लपेटने के लिए उपयोगी है: https://github.com/ryanflorence/react-training/blob/gh-pages/lessons/05-wrapping-dom-libs.md – mik01aj

उत्तर

4

आप प्रतिक्रिया का उपयोग कर रहे हैं, इसलिए आपको jQuery प्लगइन्स बजाय घटकों प्रतिक्रिया की तलाश में बेहतर होगा। आप eaxmple react-select के लिए उपयोग कर सकते हैं, जो कि चयन 2 के समान है।

+1

लेकिन मैं चयन 2 के लिए एक समाधान की आवश्यकता है क्योंकि मैं वर्तमान में इसे अपने आवेदन का उपयोग कर रहा हूं। –

+0

@Vishwasraj समाधान im मेरे सिर तोड़ने इस :( – Vikram

+0

के लिए @Vikram कोई समाधान सीएसएस पुस्तकालय अमल में लाना करने के लिए found.changed प्राप्त किया था। [कड़ी] पुस्तकालय –

10

हम this wrapper उपयोग कर रहे हैं, लेकिन वहाँ उसके चारों ओर भी कई समस्याएं हैं।

सबसे पहले, आप कोड जहां यह this issue की वजह से, NodeJS में प्रयोग किया जाता है परीक्षण नहीं कर सकते। दूसरी बात हमें defaultValue पैरामीटर के माध्यम से विभिन्न चयन 2 घटकों के प्रारंभ में समस्याएं थीं। इन तत्वों में से केवल एक (यादृच्छिक रूप से) initalized था।

इसलिए हम यह डंप और react-select जल्द ही साथ बदलने के लिए जा रहा है।

संपादित करें: हम react-select साथ react-select2-wrapper बदल दिया। यह हमारे लिए बहुत अच्छा काम करता है।

+0

यहां तक ​​कि प्रतिक्रिया- चयन करें मुद्दे हैं। मैं राज्य को सेट नहीं कर सकता। अगर मैं राज्य को सेट करने का प्रयास करता हूं तो ड्रॉपडाउन बंद नहीं होता है। –

+0

हम्म यकीन नहीं है। हमने अभी तक इसे आजमाया नहीं है। ऐसा लगता है कि यह बहुत विन्यास योग्य नहीं है। दस्तावेज़ों में कुछ ध्वज? – luboskrnac

+0

< मान = {this.state.firstValue} विकल्प = {विकल्प} ऑन चेंज = {this.handleFirstLevelChange} /> हैंडल फर्स्टलेवल चेंज: फ़ंक्शन (ईवेंट) { this.setState ({ firstValue: event.target.value }); } मुझे TypeError: ईवेंट मिलता है।लक्ष्य अपरिभाषित है –

5

आप refs [docs], आप componentDidMount समारोह में अपनी refs विशेषता के माध्यम से नोड पहुँच सकते हैं और पारित 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> 
    ); 
    } 
}); 

मैं नहीं मानता कि इस तरह से "प्रतिक्रिया है, "लेकिन अगर आप react-select या कुछ अन्य टूल का उपयोग नहीं करना चाहते हैं तो इससे मदद मिल सकती है।

संबंधित मुद्दे