जवाबों:
StyleSheet.js की प्रतिक्रिया अनुभाग के टिप्पणी अनुभाग से सीधे उद्धृत
कोड गुणवत्ता:
रेंडर फ़ंक्शन से शैलियों को स्थानांतरित करके, आप कोड को समझना आसान बना रहे हैं।
रेंडरिंग फ़ंक्शन में शैलियों को नाम देना निम्न स्तर के घटकों में अर्थ जोड़ने का एक अच्छा तरीका है।
प्रदर्शन:
स्टाइल ऑब्जेक्ट से एक स्टाइलशीट बनाना हर बार एक नई शैली ऑब्जेक्ट बनाने के बजाय आईडी द्वारा इसे संदर्भित करना संभव बनाता है।
यह पुल के माध्यम से केवल एक बार शैली भेजने की अनुमति देता है। बाद के सभी उपयोग एक आईडी (अभी तक लागू नहीं) का उल्लेख करने जा रहे हैं।
साथ ही स्टाइलशीट आपकी स्टाइलशीट सामग्री को भी मान्य करता है। इसलिए गलत स्टाइल प्रॉपर्टी की किसी भी त्रुटि को रनटाइम के बजाय संकलन के समय दिखाया जाता है जब स्टाइलशीट वास्तव में लागू किया जाता है।
StyleSheet.create({styles...})
बेहतर / तेज कैसे है {styles...}
। कोड सिर्फ साफ है, और आप इनलाइनिंग के बजाय नामकरण का भी उपयोग कर रहे हैं। क्या कोई इस पर कुछ प्रकाश डाल सकता है?
StyleSheet
संकलन पर मान्यता प्रदान करता है
StyleSheet.create
और एक सादे वस्तु के बीच का अंतर था , न कि इनलाइन बनाम कक्षा के बाहर का एक
कोई फायदा नहीं हुआ। अवधि।
StyleSheet
अधिक प्रदर्शन करने वाला हैके बीच StyleSheet
और बाहर घोषित की गई वस्तु के बीच बिल्कुल कोई प्रदर्शन अंतर नहीं है render
(यदि आप render
हर बार एक नई वस्तु बना रहे हैं तो यह अलग होगा )। प्रदर्शन अंतर एक मिथक है।
मिथक की उत्पत्ति की संभावना है क्योंकि रिएक्ट नेटिव टीम ने ऐसा करने की कोशिश की, लेकिन वे सफल नहीं थे। आधिकारिक डॉक्स में कहीं भी आपको प्रदर्शन के बारे में कुछ भी नहीं मिलेगा: https://facebook.github.io/react-native/docs/stylesheet.html , जबकि स्रोत कोड "अभी तक लागू नहीं हुआ है": https://github.com/ फेसबुक / प्रतिक्रिया देशी / ब्लॉब / मास्टर / पुस्तकालय / स्टाइलशीट / StyleSheet.js # L207
StyleSheet
संकलन समय पर शैली वस्तु को मान्य करता हैयह सच नहीं है। सादा जावास्क्रिप्ट संकलन समय पर वस्तुओं को मान्य नहीं कर सकता है।
दो चीज़ें:
const containerStyle: ViewStyle = {
...
}
StyleSheet.create( {x:{flex: "1"}} )
रनटाइम में विफल हो जाएगा, जैसा कि संकलन समय पर इस पर एक टाइपस्क्रिप्ट जांच करेगा।
स्वीकृत उत्तर ओपी प्रश्न का उत्तर नहीं है।
सवाल इनलाइन शैलियों और const
वर्ग के बाहर के बीच का अंतर नहीं है , लेकिन हमें StyleSheet.create
एक सादे वस्तु के बजाय क्यों उपयोग करना चाहिए ।
मुझे जो कुछ मिला उस पर शोध करने के बाद निम्नलिखित है (यदि आपके पास कोई जानकारी है तो कृपया अद्यतन करें)। StyleSheet.create
निम्नलिखित के विपरीत होने चाहिए:
यह विचार किया जाना है कि एक स्टाइल शीट का उपयोग कर अधिक performant था इस्तेमाल किया, और किया गया था की सिफारिश की आर.एन. टीम द्वारा इस कारण संस्करण 0.57 तक के लिए है, लेकिन यह अब नहीं रह सिफारिश की है के रूप में सही ढंग से में बताया एक और जवाब इस सवाल का।
आर एन प्रलेखन अब, निम्नलिखित कारणों के लिए स्टाइल शीट सिफारिश की गई है, हालांकि मुझे लगता है कि इन कारणों सादा वस्तुओं समारोह प्रस्तुत करना के बाहर बनाए गए करने के लिए समान रूप से लागू होता है:
तो मैं क्या सोचते हैं कर रहे हैं सादे वस्तुओं से अधिक स्टाइल शीट का उपयोग कर के संभावित लाभ?
1) इसके विपरीत दावों के बावजूद आर एन v0.59.10 पर अपना परीक्षण दर्शाता है कि आप कर जब बुला कुछ मान्यता प्राप्त StyleSheet.create()
और टाइपप्रति (और शायद प्रवाह) भी संकलन समय पर त्रुटियों रिपोर्ट करेंगे। यहां तक कि संकलन समय की जाँच मुझे लगता है कि यह अभी भी शैलियों की रन बार मान्यकरण करना लाभदायक होता है बिना पहले वे प्रतिपादन के लिए उपयोग किया जाता है, विशेष रूप से जहां घटक है कि उन शैलियों का उपयोग सशर्त गाया जा सकता है। यह इस तरह की त्रुटियों को सभी प्रतिपादन परिदृश्यों का परीक्षण किए बिना उठाया जा सकेगा।
2) यह देखते हुए कि स्टाइलशीट की आरएन टीम द्वारा सिफारिश की जाती है, उनके पास भविष्य में प्रदर्शन में सुधार करने के लिए स्टाइलशीट का उपयोग करने की उम्मीदें हो सकती हैं, और उदाहरण के लिए उनके मन में अन्य संभावित सुधार भी हो सकते हैं:
3) वर्तमान StyleSheet.create()
रन-टाइम सत्यापन उपयोगी है, लेकिन थोड़ा सीमित है। ऐसा लगता है कि यह उस प्रकार की जाँच तक सीमित है, जो आपको प्रवाह या टाइपस्क्रिप्ट के साथ मिलेगा, इसलिए यह कहना flex: "1"
या होगा borderStyle: "rubbish"
, लेकिन ऐसा नहीं width: "rubbish"
है कि प्रतिशत स्ट्रिंग हो सकता है। यह संभव है कि RN टीम भविष्य में इस तरह के सत्यापन को प्रतिशत स्ट्रिंग्स, या सीमा सीमाओं जैसी चीज़ों की जाँच करके सुधार सकती है, या आप StyleSheet.create()
अपने स्वयं के फ़ंक्शन में लपेट सकते हैं ताकि अधिक व्यापक सत्यापन हो सके।
4) स्टाइलशीट का उपयोग करके आप शायद तीसरे पक्ष के विकल्प / एक्सटेंशन जैसे प्रतिक्रिया-मूल-विस्तारित-स्टाइलशीट के लिए संक्रमण करना आसान बना रहे हैं जो अधिक प्रदान करते हैं।
के माध्यम से अपनी शैलियों का निर्माण StyleSheet.create
तभी मान्य होगा जब वैश्विक चर __DEV__
सत्य पर सेट हो (या एंड्रॉइड या आईओएस एमुलेटर के अंदर चलने के दौरान रिएक्टिव नेटिव डीईवी और पीआरडी चर देखें )
फ़ंक्शन स्रोत कोड बहुत सरल है:
create < +S: ____Styles_Internal > (obj: S): $ReadOnly < S > {
// TODO: This should return S as the return type. But first,
// we need to codemod all the callsites that are typing this
// return value as a number (even though it was opaque).
if (__DEV__) {
for (const key in obj) {
StyleSheetValidation.validateStyle(key, obj);
if (obj[key]) {
Object.freeze(obj[key]);
}
}
}
return obj;
}
मैं इसका उपयोग करने की सलाह दूंगा क्योंकि यह विकास के दौरान रन-टाइम सत्यापन करता है, साथ ही यह ऑब्जेक्ट को जमा देता है।
StyleSheet
टाइपस्क्रिप्ट में सत्यापन को छोड़कर मुझे बीच और सादे ऑब्जेक्ट में कोई अंतर नहीं मिला ।
उदाहरण के लिए, यह (टाइपिंग अंतर पर ध्यान दें):
import { View, Text, Image, StyleSheet } from 'react-native';
import logo from './logo.svg';
export default class App extends Component {
render() {
return (
<View style={styles.someViewStyle}>
<Text style={styles.someTextStyle}>Text Here</Text>
<Image style={styles.someImageStyle} source={logo} />
</View>
);
}
}
const styles: StyleSheet.create({
someViewStyle: {
backgroundColor: '#FFF',
padding: 10,
},
someTextStyle: {
fontSize: 24,
fontWeight: '600',
},
someImageStyle: {
height: 50,
width: 100,
},
});
इसके बराबर है:
import { View, Text, Image, ViewStyle, TextStyle, ImageStyle } from 'react-native';
import logo from './logo.svg';
export default class App extends Component {
render() {
return (
<View style={styles.someViewStyle}>
<Text style={styles.someTextStyle}>Text Here</Text>
<Image style={styles.someImageStyle} source={logo} />
</View>
);
}
}
const styles: {
someViewStyle: ViewStyle;
someTextStyle: TextStyle;
someImageStyle: ImageStyle;
} = {
someViewStyle: {
backgroundColor: '#FFF',
padding: 10,
},
someTextStyle: {
fontSize: 24,
fontWeight: '600',
},
someImageStyle: {
height: 50,
width: 100,
},
};