스타일 구성 요소 구문을 지원하도록 CSS-in-JS 확장
8726 단어 javascriptcssreactwebdev
css
감정을 함수처럼 만들었고 이 블로그 게시물에서는 다음 스타일 구성 요소 구문을 지원하도록 css
함수를 확장할 것입니다.const Button = styled('button')(
{
backgroundColor: "blue",
color: "white"
}
)
API를 탐색할 때 유의해야 할 몇 가지 사항은 다음과 같습니다.
// On breaking into parts:
const Button = // <-- Part: 3
styled('button') // <-- Part: 1
({ backgroundColor: 'blue' }) // <-- Part: 2
styled
함수는 생성되어야 하는 tagName
즉, styled('button') <-- 1
// is equivalent to
<button>
styled(tagName)
는 이 style-object
요소의 스타일을 지정하는 데 사용할 tagName
를 수락하는 함수를 반환합니다.({ backgroundColor: "blue" }) <-- Part 2
// is converted to
css({ backgroundColor: "blue" })
// and passed to the component as
<button className={css(...)} />
Button
를 렌더링하는 React 구성 요소button
를 반환합니다. 위의 점에서 우리는
styled
함수의 대략적인 껍질을 작성할 수 있습니다.// Part 1: styled('button'): element of type tagName to render
function styled(tagName) {
// Part 2: style('button')({ color: 'white' }) takes in the style object and applies these styles to `tagName=button` component
return function applyStyles(styleObject) {
// Part 3: `Button` react component
return function Component(props) {
// ...styling and element creation...
// Mark: 1
}
}
}
이제 Mark: 1에서 다음을 수행해야 합니다.
React.createElement
유형의 tagName
를 사용하여 요소를 생성합니다.style-object
를 css
함수에 전달하여 이름을 생성합니다. 소품에 이미 일부 className이 포함될 수 있으므로 이러한 className을 함께 구성하십시오.// continue from Mark: 1
const clonedProps = clone(props);
// a copy of props is required as by default react makes props immutable
// and if we want to modify any props we need to make a copy for our use
// compute a className for styleObject
const generatedClassName = css(styleObject);
// compose className
const className = generatedClassName + props.className ? + ` ${props.className}` : '';
// reassign composed className
clonedProps.className = className;
// create element of type `tagName` with props = `clonedProps` and `style=generateClassName`
const element = React.createElement(tagName, clonedProps);
// The `element` is of type `tagName` and of `styles=styleObject` this is one we want to render
return element;
이것이 CSS-in-JS 라이브러리의
style-components
버전의 모습입니다. clone
함수는 다음과 같이 간단할 수 있습니다.const clone = (obj) => Object.assign({}, obj);
CSS-in-JS에 대한 추가 정보:
Reference
이 문제에 관하여(스타일 구성 요소 구문을 지원하도록 CSS-in-JS 확장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vtechguys/extending-our-css-in-js-to-support-style-component-syntax-26e9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)