대화식 예제를 사용하여 스타일이 지정된 구성 요소에 대한 빠른 안내서

“재미있어…”스타일 구성 요소에 대해 처음 읽을 때 생각했습니다. 그런 다음 테스트를 거친 React 구성 요소로 바로 돌아갔습니다.

그러나 스타일 구성 요소의 공동 제작자 인 Max Stoiber는 React in Flip Flops 코딩 부트 캠프에서 그의 새로운 라이브러리를 보여주었습니다. “흥미 롭다”는“마음이 터져 요!”

나는 흥분을 거의 포함 할 수 없었다. 스타일 구성 요소의 개념을 마침내 이해했습니다. 구성 요소를 스타일링하는 방법에 대한 많은 새로운 가능성을 열었습니다. 웹 응용 프로그램을 구성하는 방법을 단순화했습니다. 그리고 React 앱 스타일에 일관성을 유지했습니다.

모두 태그가 지정된 템플릿 리터럴로 시작되었습니다.

당신은 내가 조금 오래된 학교라고 생각할 수도 있지만, 어떤 아이디어를 진정으로 이해하고 싶다면, 기본 개념에 머리를 감쌀 필요가 있다고 생각합니다. 스타일이 지정된 구성 요소로 바로 뛰어들 수 있습니다. 그러나 먼저 Max와 Glen이 프로젝트를 시작하고 실제로 스타일 구성 요소를 만들기 전에 호기심을 일으켰던 점을 알아 봅시다.

ES6의 템플릿 리터럴은 변수와 텍스트를 혼합하는 방법을 단순화합니다. 이름과 분위기, 각각 "Alice"와 "happy"의 값을 각각 할당 한 경우 템플릿 리터럴은 다음과 같습니다.

const 문장 =`$ {name}은 $ {mood}입니다. ';

“앨리스는 행복합니다.”

태그가 지정된 템플릿 리터럴은 구문을 한 단계 더 발전시킵니다.

태그는 JavaScript 함수입니다. 그러나 일반 기능과 비교할 때 두 가지 근본적인 차이점이 있습니다.

  • 태그 함수는 괄호 대신 백틱 표기법을 사용하여 호출됩니다. 아래 예에서는 인수를 백틱으로 래핑하여 greetingTag 함수를 호출합니다.
greetingTag` $ {name}은 $ {mood}입니다 .`;
  • JavaScript는 템플릿 리터럴 (백틱 사이의 모든 것)을 함수 인수로 취급합니다. 첫 번째 단계에서 JavaScript는 템플릿 리터럴을 문자열 배열로 변환합니다. 문자열 뒤에 추출 된 변수가옵니다. 위의 예를 보면 greetingTag 함수에 전달 된 변환 된 인수는 다음과 같습니다.
[ "", "는", "."], 이름, 분위기

첫 번째 인수 인 배열에는 이름과 분위기 변수 사이, 전후에 배치 한 모든 문자열이 포함됩니다. 이 예에서는 이름 앞에 아무것도 없기 때문에 첫 번째 문자열이 비어 있습니다. 다음 두 인수 인 name과 mood는 템플릿 리터럴에서 변수로 추출되었습니다.

이제 greetingTag 함수는 텍스트 배열과 이름 및 분위기 변수에 로직을 적용하고 원하는 결과를 반환 할 수 있습니다.

greetingTag라는 태그 함수를 만들어 텍스트 배열, 이름 및 분위기 변수라는 세 가지 인수를 사용합니다. 기분의 가치가 "행복"이라면, 규칙적인 인사 문장을 반환하고 다른 모든 경우에는 응원 버전의 인사를 반환합니다.

const greetingTag = (텍스트, 이름, 분위기) => {
  if (mood === 'happy') {
    `Hi $ {name}!`;을 반환하십시오.
  } else {
    `안녕하세요 $ {name}, 당신은 굉장합니다! ';
  }
}
const greeting = greetingTag` $ {name}은 $ {mood}입니다 .`;

이제 이름에 "Alice"를 지정하고 분위기에 "happy"를 지정하면 greetingTag 함수가 "Hi Alice!"를 반환합니다. 분위기의 가치를“행복”이 아닌 다른 단어로 바꾸었다면“흥분”또는“고양이”라고하면 greetingTag는“Hi Alice, 굉장 해요!”

그러나이 지식을 어떻게 사용하여 React 컴포넌트의 스타일을 지정할 수 있습니까?

스타일이 지정된 구성 요소

이 정확한 질문은 Max와 Glenn이 React 컴포넌트의 스타일링을위한 더 좋고 일관된 방법을 찾는 동안 당황했습니다. 아하! 태그 된 템플릿 리터럴은 변수뿐만 아니라 함수도 수용한다는 사실을 깨달았습니다. 아래 예와 같이 :

const greeting = greetingTag` $ {name =>`Hi $ {name}!`}`;

여기서 greetingTag는 함수가 포함 된 템플릿 리터럴을받습니다. greetingTag가 함수를 실행하면 greetingTag는 반환 된 값에 추가 논리를 적용하고 결과를 반환 할 수 있습니다.

스타일이 지정된 구성 요소도 태그 기능입니다. 그러나 인사말 패턴을 수락하는 대신 CSS 스타일이 포함 된 템플릿 리터럴을 허용합니다. 인사말 문장 대신 React 컴포넌트를 반환합니다.

작동 방식을 보여 드리겠습니다.

참고 : 아래 코드 예제는 대화식입니다. 그들과 함께 놀거나 스타일을 추가하고 지정된 값을 변경할 수 있습니다. 해당 탭을 클릭하여 다른 파일을 검사 할 수 있습니다. 또는 상단의 주황색, 파란색 주황색 또는 파란색 버튼을 눌러 다른보기간에 전환 할 수 있습니다.

응용 프로그램에서 스타일 구성 요소를 사용하려면 먼저 스타일 구성 요소를 설치해야합니다.

npm install-스타일 구성 요소 저장

아래에서 스타일이 지정된 구성 요소 제목을 만들었습니다.

styled.h1은 태그 함수입니다. 아래 컴포넌트와 동일한 React 컴포넌트를 리턴합니다.

'react'에서 import React;
const 제목 = ({children}) => 

{children}

이 솔루션의 장점은 스타일이 지정된 구성 요소가 많은 작업을 수행한다는 것입니다. 구성 요소 제목의 색상은 감청색입니다.

나는 당신이 생각하는 것을 알고 있습니다 : 우리가 이런 식으로 모든 단일 구성 요소의 스타일을 작성해야한다면 CSS 클래스를 작성하는 것과 크게 다르지 않습니다. 고맙게도 스타일 구성 요소가 훨씬 더 똑똑합니다!

대부분의 시간 동안 헤더를 검은 색으로 유지하고 다른 색상을 사용하여 산발적으로 강조 표시한다고 가정하십시오. 스타일이 지정된 구성 요소를 사용하면 기본적으로 검은 색으로 표시되고 기본 소품을 전달할 때마다 royalblue로 변경되는 색상 인식 타이틀을 만들 수 있습니다.

다른 React 컴포넌트와 마찬가지로 제목에 소품을 전달할 수 있습니다. 여기에서 두 번째 타이틀은 기본 소품을받습니다. 스타일이 지정된 구성 요소 선언 내의 소품에 액세스 할 수 있습니다. 그것은 완전히 새로운 가능성의 세계를 열어줍니다.

위에서 스타일 구성 요소 제목을 정의했습니다. 소품은 스타일이 지정된 컴포넌트 선언 내에서 액세스 할 수 있으므로 컴포넌트의 색상을 결정할 수 있습니다. 이 함수는 삼항 연산자를 사용하고 기본 속성이 true이면 royalblue를, 그렇지 않으면 검은 색을 반환합니다.

다음과 같이 명시 적으로 작성할 필요는 없습니다.

 안녕 밥, 넌 대단해! </ Title></pre><p>과제없이 기본 소품을 전달하는 것은 통과하는 것과 같습니다.<br />primary = {true}.</p><p>이제 문이 활짝 열려 있으므로 제목을보다 보편적으로 만들어 보겠습니다. 때로는 더 작은 글꼴을 사용하고 더 큰 글꼴을 사용하려면 타이틀이 필요할 수 있습니다. 때때로 당신은 그것이 보통의 무게를 갖기를 원할 수도 있고 때로는 눈에 띄고 대담한 폰트 무게를주기를 원할 수도 있습니다. 때로는 제목을 대문자 또는 대문자로 사용하고 싶을 수도 있습니다.</p><p>스타일이 지정된 구성 요소를 사용하면 단일 범용 구성 요소를 만들 수 있습니다. 그런 다음 스타일에 대해 더 이상 생각하지 않고 어디서나 사용할 수 있습니다.</p><p>위의 예에서 글꼴 크기에는 명시적인 값인 48px 또는 32px가 할당됩니다. 코드베이스가 커지면 이러한 코드를 유지하기가 어렵습니다.</p><h3>테마</h3><p>나중에 사용하기 위해 스타일이 지정된 구성 요소 집합을 만들 때 응용 프로그램 전체에 일관된 스타일을 적용하려고합니다. 스타일 규칙을 설정하는 것은 항상 가치가 있습니다. 바람직하게는 별도의 파일로. 나중에 스타일을 변경해야 할 때 모든 구성 요소를 다시 방문하지 않고 한 곳에서 스타일을 변경할 수 있습니다.</p><p>스타일이 지정된 구성 요소는 테마를 정확하게 수행 할 수있는 도구를 제공합니다.</p><p>테마는 스타일 매개 변수를 정의 할 수있는 JavaScript 오브젝트입니다.</p><pre>const 테마 = {
  색상 : {
    기본 : "royalblue",
    보조 : "청록",
    텍스트 : "검은 색"
  },
  fontSize : {
    xl : "2.4rem",
    lg : "1.8rem",
    md : "1.3rem",
    nm : "1rem",
    sm : "0.75rem"
  }
}</pre><p>위의 테마는 색상 및 fontSize 속성을 정의합니다. 응용 프로그램의 모든 스타일 구성 요소에서 해당 구성 요소에 액세스 할 수 있습니다.</p><p>그러나 먼저, 응용 프로그램이 테마를 인식하도록해야합니다. 스타일 구성 요소에서 제공하는 랩퍼 구성 요소 인 ThemeProvider에 대한 소품으로 전달해야합니다.</p><pre>"styled-components"에서 {ThemeProvider} 가져 오기;
"./theme.js"에서 테마 가져 오기;</pre><pre>const App = () => (
  <ThemeProvider theme = {theme}>
    <div>
      <Title> 안녕, 앨리스! </ ​​Title>
    </ div>
  </ ThemeProvider>
)</pre><p>이전 예제를 사용하여 테마를 사용하는 방법과 스타일이 지정된 구성 요소 내에서 해당 속성에 액세스하는 방법을 알아 보겠습니다.</p><p>제목에서 props.theme를 통해 테마 객체에 액세스 할 수 있습니다. 예를 들어 제목의 색상을 선택하려면 주어진 속성이 제목 (기본 또는 보조)에 전달되었는지 먼저 확인하십시오. 그런 다음 테마에 선언 된 해당 색상 값을 반환하십시오. 전달되지 않은 경우 표준 텍스트 색상을 반환합니다.</p><p>제목은 이제 글꼴 크기에 대해서도 결정할 수 있습니다. 먼저 xl, lg, md 또는 sm prop이 전달되었는지 확인하고이를 기반으로 font-size 속성에 적절한 값을 할당합니다. prop이 전달되지 않으면 테마에 정의 된 fontSize.nm의 값이 지정됩니다.</p><p>유연한 Title 구성 요소를 만들었습니다. 이제 CSS에 대해 걱정할 필요없이 사용할 수 있습니다. 특정 소품 세트를 전달하여 독점적으로 모양을 결정할 수 있습니다.</p><h3>스타일 구성 요소 확장</h3><p>하나의 타이틀 구성 요소만으로는 충분하지 않습니다. 예를 들어 블로그 페이지에는 게시물 제목에 h1 태그가 있고 자막에 h2 태그가 필요합니다. 텍스트를 표시하려면 단락도 필요합니다.</p><p>스타일이 지정된 구성 요소는 쉽게 확장 할 수 있습니다. h2 태그를 사용하여 새 자막 구성 요소를 만들고 제목에서 모든 스타일 규칙을 복사하여 붙여 넣을 수 있습니다. 또는 withComponenthelper 메서드를 사용하여 Title 구성 요소를 확장 할 수 있습니다. 자막은 타이틀의 모든 속성을 갖지만 h2 태그를 사용합니다.</p><pre>const 자막 = Title.withComponent ( "h2");</pre><p>제목을 확장하여 p 태그로 텍스트 구성 요소를 작성하고 동시에 색상을 theme.text로 수정하고 행 높이를 1.65? 여기에서도 스타일 구성 요소가 빛납니다.</p><pre>const 단락 = Title.withComponent ( "p");
const 텍스트 = 단락. 확장자`
  색상 : $ {props => props.theme.colors.text};
  선 높이 : 1.65;</pre><p>먼저 제목의 모든 스타일 규칙을 갖는 중개 단락 구성 요소를 만들었습니다. 그러나 p 태그와 단락을 확장하고 색상 및 선 높이 속성을 설정하는 Text 구성 요소를 사용합니다. 아래에서 제목, 자막 및 텍스트 구성 요소의 코드를 검사 할 수 있습니다.</p><p>스타일이 지정된 구성 요소를 사용하면 JavaScript로 일반 CSS를 작성할 수 있습니다. 또한 CSS 스타일과 의사 클래스를 중첩 할 수 있습니다. 미디어 쿼리 및 속성을 추가 할 수 있습니다. 마지막으로 injectGlobal 도우미 메소드를 사용하여 전역 스타일 규칙을 삽입하고 글꼴을 가져올 수 있습니다.</p><h3>의사 클래스</h3><p>의사 클래스를 사용하는 방법을 배우기 위해 마우스를 가져갈 때 색상이 변경되는 Button 구성 요소를 만들어 보겠습니다.</p><p>위의 버튼을 마우스로 가리킬 때마다 색상을 변경하기 위해 & : hover 의사 클래스를 중첩했습니다. CSS에서 사용 가능한 모든 의사 클래스를 같은 방식으로 사용할 수 있습니다.</p><h3>스타일 구성 요소를 사용하여 전역 스타일 주입</h3><p>글로벌 스타일 파일을 가져 오는 대신 injectGlobal 헬퍼를 사용하여 애플리케이션에 글로벌 스타일을 추가 할 수 있습니다. 먼저 injectGlobal 도우미를 가져와야합니다.</p><pre>"styled-components"에서 스타일 가져 오기, {ThemeProvider, injectGlobal};</pre><p>아래 예제에서는 injectGlobal을 사용하여 다음을 수행합니다.</p><ul><li>글꼴을 가져오고 모든 요소의 글꼴 모음을 "Montserrat"로 설정하십시오.</li><li>여백, 패딩 및 테두리를 재설정합니다.</li><li>screen.medium 및 screen.mobile보다 낮은 화면 크기의 미디어 쿼리를 사용하여 루트 요소 font-size를 변경하십시오. 둘 다 테마에 정의되어 있습니다.</li></ul><p>스타일이 지정된 구성 요소 테마는 일관성을 강화합니다. 자세한 내용은 내가 본 최고의 문서 중 하나 인 Styled Components Docs를 살펴보십시오.</p><p>Max와 Glen의 호기심 덕분에 스타일이 지정된 구성 요소는 React 응용 프로그램의 스타일을 지정하는 놀라운 도구 세트를 제공합니다. 스타일이 지정된 구성 요소 에코 시스템이 급성장하고 있습니다. 바로 사용 가능한 구성 요소 및 그리드 시스템을 탐색하려면 생태계 페이지를 방문하십시오. 스타일이 지정된 구성 요소로 구축 된 다른 많은 도구를 검사하십시오.</p><h3>결론</h3><p>이 자습서에서는 태그가 지정된 템플릿 리터럴이 어떻게 작동하는지 배웠습니다. 스타일 컴포넌트를 사용하여 범용 React 컴포넌트를 빌드하는 방법도 배웠습니다. 이제 테마를 사용하여 다음 애플리케이션의 일관된 스타일을 구현하는 방법을 알고 있습니다.</p><p>스타일이 지정된 컴포넌트는 React 애플리케이션을 스타일링하는 새로운 방법입니다. 즉시 사용 가능한 스타일이 지정된 구성 요소 :</p><ul><li>재사용 가능한 범용 컴포넌트를 구축 할 수 있습니다</li><li>스타일링 일관성 유지</li><li>당신이 스타일을 중첩 할 수 있습니다</li><li>필요할 때 공급 업체 접두사 추가</li><li>단순히 굉장하다!</li></ul><p>이 기사가 마음에 드 셨다면 도 50 번입니다. 정말 고맙게 생각하며 큰 차이가 있습니다.</p><img alt="" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/dupliceopportunita/1575291447832.jpeg" /><p>최근 초보자를위한 무료 React 튜토리얼을 발간했습니다. 처음부터 웹 응용 프로그램을 작성하는 방법을 배우려면 좋은 출발점이 될 것입니다. 달콤한 호박을 볼 수있는 최고의 영화를 찾는 데 도움이되는 앱을 구축하는 방법을 배웁니다.</p></div><ins data-zxname="zx-adnet" data-zxadslot="ZX-SMR53" data-zxw="970" data-zxh="250" data-overlay="true"></ins><div class="neighbor-articles"><h4 class="ui header">또한보십시오</h4><a href="/item/recreating-the-self-driving-experience-the-making-of-the-waymo-360-video-372f35/" title="자율 주행 경험 재현 : Waymo 360 ° 비디오 제작">자율 주행 경험 재현 : Waymo 360 ° 비디오 제작</a><a href="/item/a-brief-history-of-the-future-c4f6a3/" title="미래의 간략한 역사">미래의 간략한 역사</a><a href="/item/peer-discovery-in-harmony-network-45a315/" title="하모니 네트워크의 피어 발견">하모니 네트워크의 피어 발견</a><a href="/item/quarkchain-explained-part-3-sharding-in-quarkchain-state-partitioning-78738b/" title="QuarkChain 설명, 3 부 : QuarkChain의 샤딩 — 상태 분할">QuarkChain 설명, 3 부 : QuarkChain의 샤딩 — 상태 분할</a><a href="/item/what-s-next-for-wepower-ac36ea/" title="WePower의 다음 단계">WePower의 다음 단계</a></div></main><div class="push"></div></div><footer><div class="flags-footer"><a href="https://vi.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="vn flag"></i></a><a href="https://uk.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="ua flag"></i></a><a href="https://tr.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="tr flag"></i></a><a href="https://th.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="th flag"></i></a><a href="https://sv.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="ch flag"></i></a><a href="https://sr.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="rs flag"></i></a><a href="https://sl.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="si flag"></i></a><a href="https://sk.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="sk flag"></i></a><a href="https://ru.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="ru flag"></i></a><a href="https://ro.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="ro flag"></i></a><a href="https://pt.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="pt flag"></i></a><a href="https://pl.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="pl flag"></i></a><a href="https://de.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="de flag"></i></a><a href="https://ar.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="sa flag"></i></a><a href="https://bg.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="bg flag"></i></a><a href="https://cs.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="cz flag"></i></a><a href="https://da.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="dk flag"></i></a><a href="https://el.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="gr flag"></i></a><a href="https://es.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="es flag"></i></a><a href="https://et.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="ee flag"></i></a><a href="https://fi.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="fi flag"></i></a><a href="https://fr.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="fr flag"></i></a><a href="https://hi.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="in flag"></i></a><a href="https://hr.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="hr flag"></i></a><a href="https://hu.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="hu flag"></i></a><a href="https://id.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="id flag"></i></a><a href="https://dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="it flag"></i></a><a href="https://ja.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="jp flag"></i></a><a href="https://lt.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="lt flag"></i></a><a href="https://lv.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="lv flag"></i></a><a href="https://ms.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="my flag"></i></a><a href="https://nl.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="nl flag"></i></a><a href="https://no.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="no flag"></i></a><a href="https://uz.dupliceopportunita.com/item/a-quick-guide-to-styled-components-with-interactive-examples-477086/"><i class="uz flag"></i></a></div>dupliceopportunita.com<!-- --> © <!-- -->2020<!-- --> </footer></div></div></div></body></html>