यह हाल ही में, प्रतिक्रिया दुनिया में एक हल समस्या नहीं थी।
मैं एक प्रतिक्रिया घटक पुस्तकालय ElementalUI के रखरखाव में से एक हूं, और हम पिछले 6-12 महीनों के लिए स्टाइल के सभी अलग-अलग तरीकों का प्रयास कर रहे हैं। (!) आप इसे नाम दें, हमने कोशिश की है। (मैंने अपने ReactNL keynote के दौरान कुछ सबसे लोकप्रिय पुस्तकालयों के साथ अपने अनुभवों के बारे में बात की और जहां वे टूट गए)
मुद्दा यह है कि मौजूदा स्टाइल पुस्तकालयों में से कोई भी इनका उपयोग करने के लिए अंतर्निहित समर्थन नहीं है। आप इसे अधिकतर हैकी, गैर-उपयोगकर्ता के अनुकूल तरीके से कर सकते हैं, लेकिन जब आप एक घटक वितरित करते हैं, तो यह वही नहीं है जो आप चाहते हैं, है ना?
यही कारण है कि हमने styled-components
बनाया। styled-components
में दिलचस्प गुणों का एक समूह है, और उनमें से एक यह है कि थीमिंग सीधे लाइब्रेरी में बनाई गई है, जिससे इसे वितरित घटकों के निर्माण के लिए सही विकल्प मिल गया है!
यहां संक्षिप्त स्पष्टीकरण है, हालांकि मैं आपको documentation से गुजरने के लिए प्रोत्साहित करता हूं जो सबकुछ बताता है!
import React from 'react';
import styled from 'styled-components';
// Create a <Wrapper> react component that renders a <section> with
// some padding and a papayawhip background
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
यह चर, Wrapper
, अब घटकों प्रतिक्रिया है आप प्रदान कर सकते हैं:
// Use them like any other React component – except they're styled!
<Wrapper>
<Title>Hello World, this is my first styled component!</Title>
</Wrapper>
(यदि
यह styled-components
का मूल उपयोग कैसा दिखाई देता है है आप छवि पर क्लिक करते हैं आपको एक लाइव प्लेग्राउंड मिलेगा)
जब आप टैग किए गए टेम्पलेट शाब्दिक में एक इंटरपोलेटेड फ़ंक्शन पास करते हैं, तो हम आपको घटक को पास की गई गुणों को पास करते हैं। इसका मतलब है आप रंगमंच की सामग्री के लिए अनुकूल कर सकते हैं:
import styled from 'styled-components';
const Button = styled.button`
/* Adapt the colors based on primary prop */
background: ${props => props.primary ? 'palevioletred' : 'white'};
color: ${props => props.primary ? 'white' : 'palevioletred'};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
यहाँ, हम एक Button
घटक है कि आप किसी भी अन्य की तरह primary
कर सकते हैं बनाने के बाद प्रतिक्रिया घटक:
<Button>Normal</Button>
<Button primary>Primary</Button>
अब आता है थीमिंग पहलू। हम एक घटक ThemeProvider
कहा जाता है कि आप करने के लिए एक theme
गुजरती हैं और में अपना एप्लिकेशन (या एप्लिकेशन के कुछ हिस्सों) लपेट कर सकते हैं निर्यात: संदर्भ के लिए कितना गहरा धन्यवाद कि ThemeProvider
भीतर
import { ThemeProvider } from 'styled-components';
const theme = {
main: 'mediumseagreen',
};
ReactDOM.render(
<ThemeProvider theme={theme}>
<MyApp />
</ThemeProvider>,
myElem
);
अब किसी भी स्टाइल घटक, कोई फर्क नहीं पड़ता, होगा इस theme
प्रोप में इंजेक्शन प्राप्त करें।
यह वही एक themable Button
कैसा दिखेगा है:
import styled from 'styled-components';
const Button = styled.button`
/* Color the background and border with theme.main */
background: ${props => props.theme.main};
border: 2px solid ${props => props.theme.main};
/* …more styles here… */
`;
अब आप अपने Button
theme
इसे पारित हो जाता है लेने के लिए और बदलने यह है कि के आधार पर स्टाइल है होगा! (आप defaultProps
के माध्यम से डिफ़ॉल्ट भी प्रदान कर सकते हैं)
यह styled-components
का सारांश है और यह वितरित घटकों को बनाने में कैसे मदद करता है!
हमारे पास वर्तमान में डब्ल्यूआईपी doc about writing third-party component libraries है जो मैं आपको जांचने के लिए प्रोत्साहित करता हूं, और निश्चित रूप से सामान्य दस्तावेज भी एक अच्छा पढ़ा जाता है। हमने सभी अड्डों को कवर करने की कोशिश की है, इसलिए यदि आप कुछ भी नापसंद देखते हैं या आपको लगता है कि गायब है तो कृपया हमें तुरंत बताएं और हम चर्चा करेंगे!
यदि आपके पास styled-components
के बारे में कोई अन्य प्रश्न है तो यहां जवाब देने या ट्विटर पर पहुंचने के लिए स्वतंत्र महसूस करें। (@mxstbr)
आप इस के साथ अपने स्वयं के, कस्टम घटक कैसे शैली बनाते हैं? बस एक div wrapper का उपयोग करें? – MoeSattler
हां, मैं प्रति बड़े घटक के स्टाइल-घटकों का उपयोग करता हूं। कुछ ऐसा: कॉन्स बीटीएन = स्टाइल।बटन ' शैलियों: यहां; ' स्थिरांक बटन = (सहारा) => { वापसी ( {props.text} ); } –
mxstbr
आप किसी घटक में शैलियों के वास्तविक युग्मन को कैसे संबोधित करते हैं। उदाहरण के लिए, मान लें कि मेरे सभी बटन अब 5 पीएक्स की त्रिज्या चाहते हैं, मुझे उन सभी में जाना होगा और हाथ उन्हें बदलना होगा। या क्या मैं आपकी पोस्ट गलत पढ़ रहा हूं? या मीडिया प्रश्न, आप उनका उपयोग कैसे करते हैं? –