हुक का उपयोग करना
हुक 16.8.0 में पेश किए गए थे, इसलिए निम्न कोड को 16.8.0 के न्यूनतम संस्करण की आवश्यकता होती है (वर्ग घटकों के उदाहरण के लिए नीचे स्क्रॉल करें)। CodeSandbox डेमो
1. गतिशील संदर्भ के लिए मूल स्थिति निर्धारित करना
सबसे पहले, एक गतिशील संदर्भ के लिए जो उपभोक्ताओं को पारित किया जा सकता है, मैं माता-पिता की स्थिति का उपयोग करूंगा। यह सुनिश्चित करता है कि मैं सच का एक ही स्रोत जा रहा हूं। उदाहरण के लिए, मेरा मूल एप्लिकेशन इस तरह दिखाई देगा:
const App = () => {
const [language, setLanguage] = useState("en");
const value = { language, setLanguage };
return (
...
);
};
languageराज्य में संग्रहित है। हम बाद में संदर्भ के माध्यम से दोनों languageऔर सेटर फ़ंक्शन को पास करेंगे setLanguage।
2. एक प्रसंग बनाना
इसके बाद, मैंने इस तरह एक भाषा संदर्भ बनाया:
const LanguageContext = React.createContext({
language: "en",
setLanguage: () => {}
});
यहां मैं language('एन') और एक setLanguageफ़ंक्शन के लिए डिफॉल्ट सेट कर रहा हूं, जो उपभोक्ता को संदर्भ प्रदाता द्वारा भेजा जाएगा। ये केवल डिफॉल्ट हैं और माता-पिता में प्रदाता घटक का उपयोग करते समय मैं उनके मूल्य प्रदान करूंगा App।
नोट: LanguageContextवही रहता है चाहे आप हुक या वर्ग आधारित घटकों का उपयोग करें।
3. एक संदर्भ उपभोक्ता बनाना
भाषा स्विचर को भाषा सेट करने के लिए, इसे संदर्भ के माध्यम से भाषा सेटर फ़ंक्शन तक पहुंच होना चाहिए। यह कुछ इस तरह दिख सकता है:
const LanguageSwitcher = () => {
const { language, setLanguage } = useContext(LanguageContext);
return (
<button onClick={() => setLanguage("jp")}>
Switch Language (Current: {language})
</button>
);
};
यहाँ मैं सिर्फ भाषा को 'jp' में सेट कर रहा हूँ, लेकिन इसके लिए भाषा निर्धारित करने के लिए आपके पास अपने तर्क हो सकते हैं।
4. एक प्रदाता में उपभोक्ता को लपेटना
अब मैं अपनी भाषा स्विचर घटक को एक में प्रस्तुत करूँगा LanguageContext.Providerऔर उन मानों में पास करूँगा जिन्हें किसी भी स्तर तक संदर्भ के माध्यम से भेजा जाना है। यहां बताया गया है कि मेरे माता-पिता कैसे Appदिखते हैं:
const App = () => {
const [language, setLanguage] = useState("en");
const value = { language, setLanguage };
return (
<LanguageContext.Provider value={value}>
<h2>Current Language: {language}</h2>
<p>Click button to change to jp</p>
<div>
{/* Can be nested */}
<LanguageSwitcher />
</div>
</LanguageContext.Provider>
);
};
अब, जब भी भाषा स्विचर क्लिक किया जाता है, तो यह संदर्भ को गतिशील रूप से अपडेट करता है।
CodeSandbox डेमो
वर्ग घटकों का उपयोग करना
नवीनतम संदर्भ API को अभिक्रिया 16.3 में पेश किया गया था जो एक गतिशील संदर्भ होने का एक शानदार तरीका प्रदान करता है। निम्न कोड के लिए न्यूनतम 16.3.0 संस्करण की आवश्यकता होती है। CodeSandbox डेमो
1. गतिशील संदर्भ के लिए मूल स्थिति निर्धारित करना
सबसे पहले, एक गतिशील संदर्भ के लिए जो उपभोक्ताओं को पारित किया जा सकता है, मैं माता-पिता की स्थिति का उपयोग करूंगा। यह सुनिश्चित करता है कि मैं सच का एक ही स्रोत जा रहा हूं। उदाहरण के लिए, मेरा मूल एप्लिकेशन इस तरह दिखाई देगा:
class App extends Component {
setLanguage = language => {
this.setState({ language });
};
state = {
language: "en",
setLanguage: this.setLanguage
};
...
}
languageएक भाषा सेटर विधि है, जो आप राज्य वृक्ष के बाहर रख सकते हैं के साथ-साथ राज्य में संग्रहित है।
2. एक प्रसंग बनाना
इसके बाद, मैंने इस तरह एक भाषा संदर्भ बनाया:
const LanguageContext = React.createContext({
language: "en",
setLanguage: () => {}
});
यहां मैं language('एन') और एक setLanguageफ़ंक्शन के लिए डिफॉल्ट सेट कर रहा हूं, जो उपभोक्ता को संदर्भ प्रदाता द्वारा भेजा जाएगा। ये केवल डिफॉल्ट हैं और माता-पिता में प्रदाता घटक का उपयोग करते समय मैं उनके मूल्य प्रदान करूंगा App।
3. एक संदर्भ उपभोक्ता बनाना
भाषा स्विचर को भाषा सेट करने के लिए, इसे संदर्भ के माध्यम से भाषा सेटर फ़ंक्शन तक पहुंच होना चाहिए। यह कुछ इस तरह दिख सकता है:
class LanguageSwitcher extends Component {
render() {
return (
<LanguageContext.Consumer>
{({ language, setLanguage }) => (
<button onClick={() => setLanguage("jp")}>
Switch Language (Current: {language})
</button>
)}
</LanguageContext.Consumer>
);
}
}
यहाँ मैं सिर्फ भाषा को 'jp' में सेट कर रहा हूँ, लेकिन इसके लिए भाषा निर्धारित करने के लिए आपके पास अपने तर्क हो सकते हैं।
4. एक प्रदाता में उपभोक्ता को लपेटना
अब मैं अपनी भाषा स्विचर घटक को एक में प्रस्तुत करूँगा LanguageContext.Providerऔर उन मानों में पास करूँगा जिन्हें किसी भी स्तर तक संदर्भ के माध्यम से भेजा जाना है। यहां बताया गया है कि मेरे माता-पिता कैसे Appदिखते हैं:
class App extends Component {
setLanguage = language => {
this.setState({ language });
};
state = {
language: "en",
setLanguage: this.setLanguage
};
render() {
return (
<LanguageContext.Provider value={this.state}>
<h2>Current Language: {this.state.language}</h2>
<p>Click button to change to jp</p>
<div>
{/* Can be nested */}
<LanguageSwitcher />
</div>
</LanguageContext.Provider>
);
}
}
अब, जब भी भाषा स्विचर क्लिक किया जाता है, तो यह संदर्भ को गतिशील रूप से अपडेट करता है।
CodeSandbox डेमो