Redux के साथ प्रतिक्रिया? 'संदर्भ' मुद्दे के बारे में क्या?


90

मैं आमतौर पर स्टैक पर कोड से संबंधित सामान पोस्ट करता हूं, लेकिन यह इस बारे में अधिक प्रश्न है कि समुदाय के सामान्य विचार क्या हैं।

डेटा / स्थिति का प्रबंधन करने के लिए रिएक्ट के साथ Redux के उपयोग की वकालत करने वाले बहुत से लोग प्रतीत होते हैं, लेकिन दोनों को पढ़ते और सीखते समय मुझे कुछ ऐसा दिखाई देता है जो बिल्कुल सही नहीं लगता है।

Redux

इस पृष्ठ के निचले भाग में: http://redux.js.org/docs/basics/UsageWithReact.html (स्टोर पास करना) यह प्रतिक्रिया 'संदर्भ' के "जादू" का उपयोग करने की सलाह देता है।

एक विकल्प यह होगा कि इसे हर कंटेनर घटक को एक प्रस्ताव के रूप में पारित किया जाए। हालाँकि, यह थकाऊ हो जाता है, क्योंकि आपको प्रस्तुति घटकों के माध्यम से भी स्टोर करना पड़ता है क्योंकि वे घटक पेड़ में गहरे कंटेनर को प्रस्तुत करने के लिए होते हैं।

हम जो विकल्प सुझाते हैं, वह एक विशेष रिएक्ट रिडक्स घटक का उपयोग करना है जिसे जादुई रूप से सभी कंटेनर घटकों को स्टोर उपलब्ध कराने के लिए कहा जाता है ...

प्रतिक्रिया

प्रतिक्रिया प्रसंग पृष्ठ पर ( https://facebook.github.io/react/docs/context.html ) इसके शीर्ष पर एक चेतावनी है:

प्रसंग एक उन्नत और प्रयोगात्मक विशेषता है। एपीआई भविष्य के रिलीज में बदलने की संभावना है।

फिर सबसे नीचे:

जैसे स्पष्ट कोड लिखते समय वैश्विक चर सबसे बेहतर होते हैं, वैसे ही आपको ज्यादातर मामलों में संदर्भ का उपयोग करने से बचना चाहिए ...

घटकों के माध्यम से अपने मॉडल डेटा को पास करने के लिए संदर्भ का उपयोग न करें। स्पष्ट रूप से पेड़ के माध्यम से अपना डेटा फैलाना बहुत आसान है ...

इसलिए...

Redux 'प्रॉपर' के storeमाध्यम से प्रत्येक घटक के साथ नीचे जाने के बजाय प्रतिक्रिया 'संदर्भ' सुविधा का उपयोग करने की सलाह देता है । जबकि प्रतिक्रिया इसके विपरीत की सिफारिश करती है।

इसके अलावा, ऐसा लगता है कि दान अब्रामोव (रेडक्स के निर्माता) अब फेसबुक (रिएक्टर के निर्माता) के लिए काम करता है, बस मुझे और अधिक भ्रमित करने के लिए।

  • क्या मैं यह सब पढ़ रहा हूँ ..?
  • इस मुद्दे पर सामान्य वर्तमान सहमति क्या है ..?

8
आह यह एक महान प्रश्न है, मैं दूसरों के दृष्टिकोण को भी सुनने के लिए बहुत उत्सुक हूं! मुझे थोड़ा डर है कि चर्चा के पहलू के कारण यह बंद हो जाएगा। मैं वास्तव में आशा है कि यह नहीं करता है।
mjohnsonengr 15

जवाबों:


90

प्रसंग एक उन्नत विशेषता है और परिवर्तन के अधीन है। कुछ मामलों में इसकी उपयुक्तता ने इसकी गिरावट को कम कर दिया, इसलिए कुछ पुस्तकालयों जैसे रिएक्ट रेडक्स और रिएक्ट राउटर ने प्रायोगिक प्रकृति के बावजूद इस पर भरोसा किया।

यहाँ महत्वपूर्ण हिस्सा पुस्तकालयों शब्द है । यदि संदर्भ अपने व्यवहार को बदलता है, तो हमें पुस्तकालय लेखकों के रूप में समायोजित करने की आवश्यकता होगी । हालाँकि, जब तक लाइब्रेरी आपसे सीधे संदर्भ API का उपयोग करने के लिए नहीं कहती है, तब तक उपयोगकर्ता को इसके परिवर्तनों के बारे में चिंता नहीं करनी चाहिए।

रिएक्ट Redux संदर्भ का आंतरिक रूप से उपयोग करता है, लेकिन यह सार्वजनिक एपीआई में इस तथ्य को उजागर नहीं करता है। इसलिए आपको सीधे प्रतिक्रिया Redux के माध्यम से संदर्भ का उपयोग करके अधिक सुरक्षित महसूस करना चाहिए क्योंकि यदि यह बदल जाता है, तो कोड को अद्यतन करने का भार रिएक्ट Redux पर होगा और आप पर नहीं।

अंतत: रिएक्ट रेडक्स अभी भी हमेशा की तरह एक पास के रूप में पासिंग स्टोर का समर्थन करता है इसलिए यदि आप संदर्भ से पूरी तरह से बचना चाहते हैं, तो आपके पास वह विकल्प है। हालाँकि मैं कहूंगा कि यह अव्यवहारिक है।

TLDR: सीधे संदर्भ का उपयोग करने से बचें जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं। एक पुस्तकालय का उपयोग करना जो आंतरिक रूप से संदर्भ पर भरोसा करने के लिए होता है, अपेक्षाकृत सुरक्षित है।


1
वैसे डैन ने कहा। यदि कोई प्रतिक्रिया भविष्य में रिलीज में पूरी तरह से संदर्भ को हटा देती है, तो जोखिम होता है, इसके लिए किसी भी मौजूदा Redux ऐप को अपडेट करने की आवश्यकता होती है। Redux ऐसे बदलाव से उपयोगकर्ताओं को ढालने में सक्षम होने की संभावना नहीं होगी। यह देखते हुए कि आप अब फेसबुक के साथ हैं, अच्छी खबर यह है कि मुझे उम्मीद है कि यदि संदर्भ कभी भी दूर हो जाए तो आपके पास बहुत सारी अग्रिम सूचनाएँ होंगी।
Cory हाउस

6
प्रतिक्रिया संदर्भ को दूर नहीं करेगी। मेरा मतलब है, यह तकनीकी रूप से संभव है, लेकिन पूरे कारण यह मौजूद है क्योंकि एफबी के अंदर कई उत्पादों को इसकी आवश्यकता थी। इसलिए जब तक कोई समतुल्य समाधान नहीं होगा, वह दूर नहीं जाएगा। लेकिन इसका सटीक एपीआई बदल सकता है जो हम उपयोगकर्ताओं को ढालते हैं।
दान अब्रामोव

5
एक और महत्वपूर्ण नोट भविष्य में संदर्भ को कम करने के बजाय संदर्भ का उपयोग करने की योजना है। हमें लगता है कि यह स्टाइल, एनिमेशन, जेस्चर हैंडलिंग आदि के लिए उपयोगी साबित हो सकता है
दान Abramov

हालांकि, यह ध्यान रखना दिलचस्प है कि जब आपको रिएक्ट कंपोनेंट्स (जैसे मैटेरियल-यूआई) की लाइब्रेरी मिलती है, तो वे स्वाभाविक रूप से आपके एप्लिकेशन स्टेट मॉडल का हिस्सा नहीं बनेंगे, लेकिन अभी भी रिएक्ट घटकों का एक पेड़ है, जिसकी समान आवश्यकताएं हैं अपने स्वयं के राज्य मॉडल और डेटा प्रवाह को 'मुख्य' अनुप्रयोग के लिए अलग बनाए रखना। इसलिए वे संदर्भ सुविधा का उपयोग अपने बच्चे को खोज के लिए नीचे डेटा पास करने के एकमात्र साधन (उनके लिए) के रूप में कर रहे हैं।
स्टीफनविल

1
@DanAbramov नए संदर्भ एपीआई के बारे में क्या? क्या यह अभी भी उपयोग करने के लिए अनुशंसित नहीं है?
स्टेनिस्लाव मेयरोव

4

मैं दूसरों के बारे में नहीं जानता, लेकिन मैं अपने घटकों को लपेटने के लिए रिएक्ट-रिडक्स के कनेक्ट डेकोरेटर का उपयोग करना पसंद करता हूं, ताकि मेरी ज़रूरत के स्टोर से केवल प्रॉपर मेरे घटक में पारित हो जाए। यह एक अर्थ में संदर्भ के उपयोग को सही ठहराता है क्योंकि मैं इसका उपभोग नहीं कर रहा हूं (और मुझे पता है, एक नियम के रूप में, कोई भी कोड जो मैं प्रभारी हूं वह इसका उपभोग नहीं करेगा)।

जब मैं अपने घटकों का परीक्षण करता हूं, तो मैं गैर-लिपटे घटक का परीक्षण करता हूं। क्योंकि रिएक्ट-रिडक्स ने केवल उस घटक पर मेरी जरूरत वाले प्रॉपर को पास किया, मुझे अब पता है कि जब मैं टेस्ट लिख रहा हूं तो मुझे क्या प्रॉपर चाहिए।

मुझे लगता है कि मैं अपने कोड में कभी भी संदर्भ शब्द नहीं देखता, मैं इसका उपभोग नहीं करता, इसलिए कुछ हद तक यह मुझे प्रभावित नहीं करता है! यह फेसबुक की "प्रायोगिक" चेतावनी के बारे में कुछ नहीं कहता है। यदि संदर्भ गायब हो गया है, तो मैं तब तक सभी के लिए खराब हो जाऊंगा जब तक कि Redux अपडेट नहीं किया गया था।


दिलचस्प ... मैं देख रहा हूं कि ' कॉन्टेक्ट -रेडक्स' के बारे में आपका क्या मतलब है Providerऔर connectसभी कॉनटेक्स्ट सामानों का उपयोग करना। मुझे लगता है कि दान अब्रामोव के साथ अब एफबी में होने के नाते आप उम्मीद करेंगे कि अगर कॉन्टेक्स्ट बदल गया है और 'रिएक्ट-रिडक्स' अपडेट हो जाएगा ... लेकिन कोई गारंटी नहीं है, और एफबी की "प्रयोगात्मक" चेतावनी अभी भी सभी को देखने के लिए है।
स्टीफन लास्ट

मुझे निश्चित रूप से उम्मीद है कि अगर एफबी लूप में प्रतिक्रिया-रिडक्स नहीं रखता है, तो कुछ भी संदर्भ में होता है, एक खुला स्रोत योगदानकर्ता मेरी इच्छा से कहीं अधिक परिचित है; यदि नहीं, तो मैं इसका पता लगाऊंगा और इसे स्वयं करूंगा!
mjohnsonengr

मैंने ट्विटर के माध्यम से अपने विचारों के लिए डैन से पूछा ... अच्छा जवाब, उसी तर्ज पर ... लाइब्रेरी का उपयोग करें जो कॉन्टेक्स्ट का उपयोग करता है, सीधे इसका उपयोग न करें।
स्टीफन लास्ट

1

एक npm मॉड्यूल है जो प्रतिक्रिया संदर्भ के लिए redux को जोड़ना वास्तव में आसान बनाता है

https://github.com/jamrizzi/redux-context-provider

https://www.npmjs.com/package/redux-context-provider

import React, { Component } from 'react';
import ReduxContextProvider from 'redux-context-provider';
import createStore from './createStore';
import actions from './actions';
import Routes from './routes';

export default class App extends Component {
  render() {
    return (
      <ReduxContextProvider store={store} actions={actions}>
        <Routes />
      </ReduxContextProvider>
    );
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.