मैं अपने स्कीमा से नाम ट्रांसलेटेड नामक एक विशिष्ट चर से पूछताछ करता हूं, यह लोकेल के पैरामीटर को एन-सीए, एफआर-एफए आदि के साथ लेता है और फ्रेंच में वांछित शब्द प्राप्त करता है। और जिस तरह से मैं इसे अपने फ्रंटएंड रिएक्टज एप्लिकेशन में संभालता हूं वह इस प्रकार है:
export const App = () => {
const { locale } = useIntl()
const LOAD_TABLE = gql`
query getItems($id: String!) {
Items(id: $id) {
id
notes
nameTranslate(language:"${l}")
defaultClass {
nameTranslate(language:"${l}")
}
}
}
`
useEffect(() => {
// a function to fetch LOAD_TABLE
},[locale])
}
उपरोक्त कोड पूरी तरह से ठीक काम करता है और जब भी मैं लोकेल वेरिएबल को बदलता हूं तो यह क्वेरी को फिर से प्राप्त करता है। लेकिन इसके साथ समस्या यह है कि मेरे पास कई अन्य प्रश्न हैं जिनके साथ मुझे काम करने की ज़रूरत है, मेरी फ़ाइल की लंबाई बहुत लंबी और प्रबंधित करने में कठिन हो जाती है। उसी समय अगर मैं फ़ाइल को बाहर निकालता हूं, तो मैं नाम ट्रांसलेट के लिए गतिशील रूप से एक प्रकार जोड़ने का विशेषाधिकार खो देता हूं .. मैं इस मुद्दे को कैसे हल कर सकता हूं?
1 उत्तर
आप कस्टम हुक का उपयोग करके इसे अधिक मॉड्यूलर लेकिन फिर भी गतिशील बना सकते हैं, उदाहरण के लिए:
// hooks/useItemsQuery.js
function useItemsQuery(locale) {
const itemsQuery = useMemo(() => gql`
query getItems($id: String!) {
Items(id: $id) {
id
notes
nameTranslate(language:"${locale}")
defaultClass {
nameTranslate(language:"${locale}")
}
}
}
`, [locale])
return itemsQuery
}
// App.js
export const App = () => {
const { locale } = useIntl()
const itemsQuery = useItemsQuery(locale)
useEffect(() => {
// a function to fetch itemsQuery
}, [itemsQuery])
}
या यदि आपको रिएक्ट के बाहर कॉल करने की आवश्यकता है तो बस एक सामान्य कार्य करेगा। मैं सोचता हूं इसका कोई पूर्ण प्रभाव नहीं होगा क्योंकि es6 tpl अक्षर कैश किए जाते हैं (gql`` भाग) जब तक कि किसी फ़ंक्शन के अंदर भी चर नहीं बदलते हैं। अगर ऐसा है तो ऊपर दिए गए useMemo का उपयोग वैसे भी बेमानी है।
function itemsQuery(locale) {
return gql`
query getItems($id: String!) {
Items(id: $id) {
id
notes
nameTranslate(language:"${locale}")
defaultClass {
nameTranslate(language:"${locale}")
}
}
}
`
}
संबंधित सवाल
नए सवाल
reactjs
प्रतिक्रिया उपयोगकर्ता इंटरफ़ेस के निर्माण के लिए एक जावास्क्रिप्ट पुस्तकालय है। यह एक घोषणात्मक, घटक-आधारित प्रतिमान का उपयोग करता है और इसका उद्देश्य कुशल और लचीला दोनों है।
useMemo
(और अन्य हुक) को कस्टम हुक से भी बुलाया जा सकता है।use
जैसेitemsQuery
से शुरू नहीं, औरuseMemo
के उपयोग को हटा दें। इसके बारे में सोचते हुए, ES6 स्ट्रिंग्स को वैसे भी कैश किया जाता है, इसलिए हो सकता हैuseMemo
का उपयोग न करने के लिए कोई पूर्ण ओवरहेड नहीं - एक उदाहरण के साथ अपडेट होगा