यहाँ सरल परिदृश्य है, मैं संघर्ष कर रहा हूँ

apicontainer.js

import mockApi from './mock-api';
import realApi from './api';
function getApi() {
   return Cookies.get('isMock') ? mockApi: realApi;
}
let api = getApi();
export function changeApi() {
    api = getApi();
}
export default api

somepage.js

import api from './path-to/apicontainer';

एप्लिकेशन लोड होने के बाद, यदि कुकी सेट/निकालें और changeApi विधि को कॉल करें, तो क्या यह संदर्भ को गतिशील रूप से बदल देगा और सही एपीआई लौटाएगा या क्या कोई बेहतर समाधान है?

0
hashbytes 28 मार्च 2018, 01:22

2 जवाब

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

0
CertainPerformance 27 मार्च 2018, 22:27

हां, यह संभव है क्योंकि ES6 मॉड्यूल बाइंडिंग (लाइव कनेक्शन) निर्यात करते हैं। अधिक पढ़ें यहां

apicontainer.js

import mockApi from './mock-api';
import realApi from './api';

function getApi() {
   return Cookies.get('isMock') ? mockApi: realApi;
}

export function changeApi() {
    api = getApi();
}
export let api = getApi();

somepage.js

import { api, changeApi }  from './path-to/apicontainer';
// whenever you change the condition (cookie in this case) 
changeApi(); // must call the `changeApi` to update the api reference value

इस बारे में और पढ़ें कि ES6 मॉड्यूल कैसे काम करता है

2
Carloluis 28 मार्च 2018, 01:06