क्या रिएक्ट नेटिव में इस सीएसएस के बराबर है, ताकि ऐप हर जगह एक ही फ़ॉन्ट का उपयोग करे?
body {
font-family: 'Open Sans';
}
प्रत्येक पाठ नोड पर इसे मैन्युअल रूप से लागू करना अत्यधिक जटिल लगता है।
क्या रिएक्ट नेटिव में इस सीएसएस के बराबर है, ताकि ऐप हर जगह एक ही फ़ॉन्ट का उपयोग करे?
body {
font-family: 'Open Sans';
}
प्रत्येक पाठ नोड पर इसे मैन्युअल रूप से लागू करना अत्यधिक जटिल लगता है।
जवाबों:
अनुशंसित तरीका यह है कि अपना स्वयं का घटक बनाएं, जैसे कि MyAppText। MyAppText एक साधारण घटक होगा जो आपके सार्वभौमिक शैली का उपयोग करके एक पाठ घटक को प्रस्तुत करता है और अन्य सहारा से गुजर सकता है, आदि।
https://facebook.github.io/react-native/docs/text.html#limited-style-inheritance
render()
कंस्ट्रक्टर के बजाय संभाला जाना चाहिए । useMemo
अगर दक्षता महत्वपूर्ण है, तो हुक का उपयोग करने से भी मदद मिल सकती है। वैकल्पिक रूप से, यदि आप इसे कंस्ट्रक्टर में रखना चाहते हैं, तो एक componentDidUpdate
तर्क जोड़ना महत्वपूर्ण है जो this.style
तब अपडेट होता है जब घटक एक स्टाइल प्रोप परिवर्तन के कारण अपडेट होता है।
हाल ही में एक नोड मॉड्यूल बनाया गया था जो इस समस्या को हल करता है ताकि आपको एक और घटक बनाने की आवश्यकता न हो ।
https://github.com/Ajackster/react-native-global-props
https://www.npmjs.com/package/react-native-global-props
प्रलेखन में कहा गया है कि आपके उच्चतम आदेश घटक में, setCustomText
फ़ंक्शन को इस तरह आयात करें।
import { setCustomText } from 'react-native-global-props';
फिर, प्रतिक्रिया-मूल Text
घटक के लिए इच्छित कस्टम स्टाइल / प्रॉप्स बनाएं । आपके मामले में, आप हर घटक पर काम करने के लिए fontFamily चाहेंगे Text
।
const customTextProps = {
style: {
fontFamily: yourFont
}
}
setCustomText
फ़ंक्शन को कॉल करें और फ़ंक्शन में अपने प्रॉपर / शैलियों को पास करें।
setCustomText(customTextProps);
और फिर सभी प्रतिक्रिया-मूल Text
घटकों में आपके द्वारा घोषित किसी भी अन्य सहारा / शैली के साथ-साथ आपके घोषित फ़ॉन्ट भी होंगे।
<Text style={styles.text}>
?? यह सही समाधान नहीं है जैसे body {font-family: 'Open Sans';}
कि किसी भी अद्यतन समाधान है ??
Text style={styles.text}>
। आपको बस अपने एप्लिकेशन में कहीं पर अपने कस्टम प्रॉप्स को घोषित करने की आवश्यकता है और यह आपके सभी पाठ घटकों पर लागू होगा। यह बहुत समान हैbody {font-family: ....}
प्रतिक्रियात्मक मूल 0.56.0+ के लिए जाँचें कि क्या डिफ़ॉल्टप्रॉप को पहले परिभाषित किया गया है:
Text.defaultProps = Text.defaultProps || {}
फिर जोड़िए:
Text.defaultProps.style = { fontFamily: 'some_font' }
App.js फ़ाइल (या आपके पास कोई भी मूल घटक) के निर्माता में ऊपर जोड़ें।
शैली को ओवरराइड करने के लिए आप एक स्टाइल ऑब्जेक्ट बना सकते हैं और इसे फैला सकते हैं फिर अपनी अतिरिक्त शैली (जैसे { ...baseStyle, fontSize: 16 }
) जोड़ सकते हैं
defaultProps
तब मौजूद नहीं था जब अन्य सभी उत्तर लिखे गए थे, लेकिन यह अब ऐसा करने का तरीका है।
style
विशेष Text
घटकों की शैलियों को
style
पाठ घटक में प्रोप को परिभाषित करता है , तो डिफ़ॉल्ट फ़ॉन्ट को प्रतिस्थापित किया जाएगा।
आप पाठ के उपयोग से अपने किसी भी घटक में इसे जोड़कर पाठ व्यवहार को ओवरराइड कर सकते हैं:
let oldRender = Text.prototype.render;
Text.prototype.render = function (...args) {
let origin = oldRender.call(this, ...args);
return React.cloneElement(origin, {
style: [{color: 'red', fontFamily: 'Arial'}, origin.props.style]
});
};
संपादित करें: चूंकि प्रतिक्रियाशील मूल निवासी 0.56, Text.prototype
अब काम नहीं कर रहा है। आपको निकालने की आवश्यकता है .prototype
:
let oldRender = Text.render;
Text.render = function (...args) {
let origin = oldRender.call(this, ...args);
return React.cloneElement(origin, {
style: [{color: 'red', fontFamily: 'Arial'}, origin.props.style]
});
};
जोड़ना
"rnpm": {
"assets": [
"./assets/fonts/"
]
}
में package.json
तो चलानेreact-native link
React-Native 0.56 के साथ, बदलने की उपरोक्त विधि Text.prototype.render
अब काम नहीं करती है, इसलिए आपको अपने स्वयं के घटक का उपयोग करना होगा, जिसे एक पंक्ति में किया जा सकता है!
MyText.js
export default props => <Text {...props} style={[{fontFamily: 'Helvetica'}, props.style]}>{props.children}</Text>
AnotherComponent.js
import Text from './MyText';
...
<Text>This will show in default font.</Text>
...
useRef
। reactjs.org/docs/hooks-reference.html#useref
इस फ़ंक्शन को अपने मूल App
घटक में जोड़ें और फिर इन निर्देशों का उपयोग करके अपने फ़ॉन्ट को जोड़ने के बाद अपने निर्माता से इसे चलाएं। https://medium.com/react-native-training/react-native-custom-fonts-ccc9aacf9e5e
import {Text, TextInput} from 'react-native'
SetDefaultFontFamily = () => {
let components = [Text, TextInput]
const customProps = {
style: {
fontFamily: "Rubik"
}
}
for(let i = 0; i < components.length; i++) {
const TextRender = components[i].prototype.render;
const initialDefaultProps = components[i].prototype.constructor.defaultProps;
components[i].prototype.constructor.defaultProps = {
...initialDefaultProps,
...customProps,
}
components[i].prototype.render = function render() {
let oldProps = this.props;
this.props = { ...this.props, style: [customProps.style, this.props.style] };
try {
return TextRender.apply(this, arguments);
} finally {
this.props = oldProps;
}
};
}
}
const App = StackNavigator({...})
और export default App
मैं वास्तव में इस कोड को कहां रखूंगा क्योंकि मुझे नहीं लगता कि मैं यहां एक कंस्ट्रक्टर का उपयोग कर सकता हूं?
इस धागे के लिए सुपर देर से लेकिन यहाँ जाता है।
TLDR; निम्नलिखित ब्लॉक को अपने में जोड़ेंAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// HERE: replace "Verlag" with your font
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
कुछ तरीकों से आप ऐसा कर सकते हैं एक प्लगइन का उपयोग कर बाहर की तरह react-native-global-props
तो बीमार आप कदम से कदम हालांकि चलना।
पहले अपनी संपत्ति के लिए एक स्थान बनाएँ। हमारी निर्देशिका में निम्नलिखित निर्देशिका बनाते हैं।
`` `
ios/
static/
fonts/
`` `
अब हमारे पैकेज में एक "React Native" NPM जोड़ें
"rnpm": {
"static": [
"./static/fonts/"
]
}
अब हम अपनी संपत्ति को अपने मूल ऐप्स में जोड़ने के लिए "प्रतिक्रिया-मूल लिंक" चला सकते हैं।
परियोजनाओं में अपना फ़ॉन्ट नाम जोड़ना चाहिए .plist
( code ios/*/Info.plist
पुष्टि करने के लिए वीएस कोड उपयोगकर्ताओं के लिए)
यहाँ मान लें Verlag
कि आपके द्वारा जोड़ा गया फ़ॉन्ट है, इसे कुछ इस तरह दिखना चाहिए:
<dict>
<plist>
.....
<key>UIAppFonts</key>
<array>
<string>Verlag Bold Italic.otf</string>
<string>Verlag Book Italic.otf</string>
<string>Verlag Light.otf</string>
<string>Verlag XLight Italic.otf</string>
<string>Verlag XLight.otf</string>
<string>Verlag-Black.otf</string>
<string>Verlag-BlackItalic.otf</string>
<string>Verlag-Bold.otf</string>
<string>Verlag-Book.otf</string>
<string>Verlag-LightItalic.otf</string>
</array>
....
</dict>
</plist>
अब जब आपने उन्हें मैप किया है, तो अब सुनिश्चित करें कि वे वास्तव में वहां हैं और लोड किया जा रहा है (यह भी है कि आप इसे मैन्युअल रूप से कैसे करेंगे)।
जाओ "Build Phase" > "Copy Bundler Resource"
, अगर यह काम नहीं करता था तो आप मैन्युअल रूप से उनके यहाँ जोड़ देंगे।
पहले अपने XCode लॉग खोलें, जैसे:
तब आप AppDelegate.m
फ़ॉन्ट और फ़ॉन्ट परिवार के नाम लॉग इन करने के लिए अपने ब्लॉक को जोड़ सकते हैं ।
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
.....
for (NSString* family in [UIFont familyNames])
{
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family])
{
NSLog(@" %@", name);
}
}
...
}
एक बार जब आप दौड़ते हैं तो आपको अपने फोंट ढूंढना चाहिए अगर सही ढंग से लोड किया गया है, तो यहां हमें इस तरह से लॉग में मिला है:
2018-05-07 10:57:04.194127-0700 MyApp[84024:1486266] Verlag
2018-05-07 10:57:04.194266-0700 MyApp[84024:1486266] Verlag-Book
2018-05-07 10:57:04.194401-0700 MyApp[84024:1486266] Verlag-BlackItalic
2018-05-07 10:57:04.194516-0700 MyApp[84024:1486266] Verlag-BoldItalic
2018-05-07 10:57:04.194616-0700 MyApp[84024:1486266] Verlag-XLight
2018-05-07 10:57:04.194737-0700 MyApp[84024:1486266] Verlag-Bold
2018-05-07 10:57:04.194833-0700 MyApp[84024:1486266] Verlag-Black
2018-05-07 10:57:04.194942-0700 MyApp[84024:1486266] Verlag-XLightItalic
2018-05-07 10:57:04.195170-0700 MyApp[84024:1486266] Verlag-LightItalic
2018-05-07 10:57:04.195327-0700 MyApp[84024:1486266] Verlag-BookItalic
2018-05-07 10:57:04.195510-0700 MyApp[84024:1486266] Verlag-Light
तो अब हम जानते हैं कि यह Verlag
परिवार को लोड करता है और उस परिवार के अंदर के फोंट हैं
Verlag-Book
Verlag-BlackItalic
Verlag-BoldItalic
Verlag-XLight
Verlag-Bold
Verlag-Black
Verlag-XLightItalic
Verlag-LightItalic
Verlag-BookItalic
Verlag-Light
ये अब मामले संवेदनशील नाम हैं जिन्हें हम अपने फ़ॉन्ट परिवार में उपयोग कर सकते हैं हम अपनी प्रतिक्रिया देशी ऐप में उपयोग कर सकते हैं।
फिर अपने फ़ॉन्ट परिवार का नाम AppDelegate.m
इस पंक्ति के साथ जोड़ने के लिए एक डिफ़ॉल्ट फ़ॉन्ट सेट करें
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// ADD THIS LINE (replace "Verlag" with your font)
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
किया हुआ।
यह मेरे लिए काम करता है: रिवाज मूल में कस्टम फ़ॉन्ट जोड़ें
अपने फॉन्ट डाउनलोड करें और उन्हें एसेट्स / फोंट फ़ोल्डर में रखें, इस लाइन को package.json में जोड़ें
"rnpm": {
"assets": ["assets/fonts/Sarpanch"]}
तब टर्मिनल खोलें और इस कमांड को चलाएं: प्रतिक्रिया-देशी लिंक
अब आपका जाना अच्छा है। अधिक विस्तृत कदम के लिए। ऊपर दिए गए लिंक पर जाएँ