import React from 'react';
import styled from 'styled-components';
interface ButtonProps {
label: string;
}
function RoundButton({label}: ButtonProps) {
// code
// ...
return <ButtonStyle label={label}> This is button component </ButtonStyle>;
}
const ButtonStyle = styled.button<ButtonProps>`
color: turquoise;
label: ${props => props.label || ""};
`;
// syntax
tag `
string text ${expression} string text
`
// 이 때 tag는 함수라고 한다.
var person = 'NAME';
var age = 20;
function tag(strings, personExp, ageExp) {
console.log(strings, personExp, ageExp);
}
tag`Person ${person} is a ${age}`;
// [['Person', ' is a ', ''], 'NAME', 20]
import React from 'react';
import styled from '@emotion/styled';
import { css } from '@emotion/react';
interface ButtonProps {
label: string;
color: string;
primary: boolean;
}
function Button({ label, color }: ButtonProps) {
const handleClick = () => {
alert('Clicked button!');
};
return (
<button
css={css`
padding: 32px;
font-size: 24px;
color: ${color};
font-weight: bold;
background-color: green;
&:hover {
background-color: green;
}
`}
onClick={handleClick}
>
${label}
</button>
);
}
export default Button;
import React from 'react';
import styled from '@emotion/styled'
interface ButtonProps {
label: string;
}
function RoundButton({label}: ButtonProps) {
// code
// ...
return <ButtonStyle label={label}> This is button component </ButtonStyle>;
}
const ButtonStyle = styled.button<ButtonProps>`
color: turquoise;
label: ${props => props.label || ""};
`;
trend를 봤을 땐 emotion.js 인기가 쉽게 늘지 않고 있다. 실제로도 documentation을 보며 특징을 분석해봤으나 장점이 쉽사리 드러나지 않는다.
웹 상에서 돌아다니는 장점으로 build하였을 때 bundle size가 emotion이 작다고 한다. 그러나 styled component에서 개선 중이어서 비슷해지거나 더 좋아질 수 있는 여지가 있어보인다.
그래도 emotion.js 쓰면서 주관적으로 편했던 것은,
component에 style을 css prop으로 넘겨주면서 조금 더 직접적으로 HTML tag와 함께 볼 수 있었다. styled component는 component 밖에서 선언하고 component 안에서 tag 호출처럼 사용해서 실제 HTML tag가 뭔지 style이 뭔지 보려면 선언 부분으로 갔어야 했다.