2017-03-28 24 views
5

के साथ async प्रतिक्रिया-चयन का उपयोग करें I async प्रतिक्रिया-चयन (Select.Async) को लागू करने का प्रयास करें। समस्या यह है कि हम रेडक्स-सागा में लाने के लिए चाहते हैं। तो यदि कोई उपयोगकर्ता कुछ टाइप करता है, तो फ़ेच-एक्शन ट्रिगर किया जाना चाहिए। सागा फिर रिकॉर्ड लाती है और उन्हें स्टोर में सहेजा जाता है। यह अब तक काम करता है। दुर्भाग्य से लोडऑप्शन को एक वादा वापस करना होगा या कॉलबैक को कॉल किया जाना चाहिए। चूंकि नए पुनर्प्राप्त विकल्पों को एक बदलती संपत्ति के साथ प्रचारित किया जाता है, इसलिए मुझे का चयन करने का कोई तरीका नहीं दिखता है। एसिंक साथ ही एसाइन फ़ेच कॉल करने के लिए गाथा के साथ। कोई सुझाव?Redux-saga

<Select.Async 
    multi={false} 
    value={this.props.value} 
    onChange={this.onChange} 
    loadOptions={(searchTerm) => this.props.options.load(searchTerm)} 
    /> 

मैं एक हैक जहां मैं एक वर्ग चर को कॉलबैक सौंपा और componentWillReceiveProps पर इसे सुलझाने के लिए किया था। इस तरह बदसूरत और ठीक से काम नहीं किया, इसलिए मैं एक बेहतर समाधान की तलाश में हूं।

धन्यवाद

उत्तर

8

redux-saga एसिंक्रोनस रूप react-select के लिए विकल्प प्राप्त करने की तरह से निपटने के साइड इफेक्ट के लिए है। यही कारण है कि आपको एसिंक सामग्री redux-saga पर छोड़नी चाहिए। मैंने कभी भी react-select का उपयोग नहीं किया है, लेकिन दस्तावेज़ीकरण को देखकर मैं इसे इस तरह हल कर दूंगा:

आपका घटक बहुत आसान हो जाता है। अपने रेडक्स स्टोर से बस value और options प्राप्त करें। optionsRequestedOPTIONS_REQUESTED कार्रवाई के लिए एक कार्य निर्माता है: OPTIONS_REQUESTED कार्रवाई कि onInputChange द्वारा trigged है के लिए

const ConnectedSelect = ({ value, options, optionsRequested }) => (
    <Select 
    value={value} 
    options={options} 
    onInputChange={optionsRequested} 
    /> 
) 

export default connect(store => ({ 
    value: selectors.getValue(store), 
    options: selectors.getOptions(store), 
}), { 
    optionsRequested: actions.optionsRequested, 
})(ConnectedSelect) 

एक गाथा परिभाषा घड़ियां, सर्वर से दिए गए searchTerm साथ डेटा लोड करता है और redux दुकान अद्यतन करने के लिए OPTIONS_RECEIVED कार्रवाई डिस्पैचिज।

function* watchLoadOptions(searchTerm) { 
    const options = yield call(api.getOptions, searchTerm) 
    yield put(optionsReceived(options)) 
} 

दूसरे शब्दों में: अपने घटक के रूप में शुद्ध करें और redux-saga

मुझे आशा है कि इस सवाल का जवाब आप के लिए उपयोगी था में सभी पक्ष प्रभाव/async कॉल संभाल।

+0

आपके उत्तर के लिए धन्यवाद! हां, जैसा कि आपने वर्णन किया है, वैसे ही मैं समस्या को हल करना चाहता हूं। मुद्दा यह है कि प्रतिक्रिया-चयन के "ऑन चेंज" (लोडऑप्शन), जहां मुझे "विकल्प अनुरोधित" कॉल करना होगा, एक वादा वापस करने की अपेक्षा करता है। Thats क्योंकि वे उम्मीद करते हैं कि आप वहां लाने के लिए कॉल करें। जहां तक ​​मुझे पता है कि गाथा के साथ घटकों में एक वादा हल करने का कोई तरीका नहीं है? – MethodenMann

+0

हाय, मैंने यहां प्रलेखन को देखा: https://github.com/JedWatson/react-select#usage और 'onChange' को एक वादा वापस करने की आवश्यकता नहीं है। यह सिर्फ एक घटना हैंडलर है। मेरे उदाहरण में मैं 'विकल्प बदलें 'एक्शन क्रिएटर को कॉल करने के लिए' ऑन चेंज 'का उपयोग करता हूं जिसे फिर रेडक्स द्वारा प्रेषित किया जाता है और आखिरकार' सागा 'द्वारा संभाला जाता है जो सेवा अनुरोध करता है। – Alex

+0

हे। ओह क्षमा करें, अब मैं भ्रम देखता हूं। मैं अपने sagas में searchTerm के रूप में चयन के मूल्य का उपयोग नहीं करना चाहता। प्रतिक्रिया-चयन आपको खोज करने के लिए टाइप करने की अनुमति देता है। इस खोज पर मैं उपयोगकर्ता के चयन के लिए अपने प्रतिक्रिया-चयन के लिए नए विकल्प प्राप्त करना चाहता हूं। ऐसा इसलिए है क्योंकि हजारों रिकॉर्ड हो सकते हैं और मैं उन्हें शुरुआत में लोड नहीं करना चाहता हूं। यह loadOptions के साथ हासिल किया जा सकता है और वहां मुझे एक वादा की आवश्यकता है। – MethodenMann

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

  • कोई संबंधित समस्या नहीं^_^