#799๋ฅผ ๋ฐ๋์ง๋ง ์คํ์ผ์ด ์ง์ ๋ ๊ตฌ์ฑ ์์ ๋งํฌ๋ฅผ ๊ฐ๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ ์ป์ ์ ์์๊ณ href๋ฅผ ๋ณต์ ํด์ผ ํ์ต๋๋ค.
const StyledLink = styled.a`
color: red;
background: blue;
`
export default ({ href, name }) => (
<Link prefetch href={href}>
<StyledLink href={href}>{name}</StyledLink>
</Link>
)
styled-component ๋งํฌ๋ฅผ ๋ง๋๋ ์ ์ ํ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
next.js ์ฌ์ฉ 2.3.1.
Chrome์์ href
์์ฑ ์์ด a
ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋ ์ ํํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋งํฌ๋ก ์คํ์ผ์ด ์ง์ ๋์ง ์์์ผ๋ฉฐ ์ผ๋ฐ ๋งํฌ์ ๋ธ๋ผ์ฐ์ ์ ๊ทผ์ฑ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ํจ๊ณผ๊ฐ ์์๋ ๊ฒ์ a
ํ๊ทธ์ ๋น href
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค.
์ด๊ฒ๋ ๊ฒฝํํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ณต๋ฐฑ๋ณด๋ค href๋ฅผ ๋ ๋ฒ์งธ๋ก ํฌํจํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ ๋๋ค. ๋ธ๋ผ์ฐ์ URL ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ์ฉ์ธ ๊ฒฝ์ฐ.
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋์ ๊ตฌ์ฑ ์์๋ฅผ styledcomponents์ ์ ๋ฌํ ์ ์์ต๋๋ค.
https://github.com/styled-components/styled-components#third -party-components
import Link from 'next/link'
const StyledLink = styled(Link)`
color: red;
background: blue;
`
๊ทธ๊ฑธ ์จ
export default () => (<div><StyledLink href="mylink">MyText</StyledLink></div>)
@kennylavender ๊ฐ์ฌํฉ๋๋ค. ์๋ํด๋ณด๊ฒ ์ต๋๋ค!
@sedubois ๊ฐ ํจ๊ณผ๊ฐ ์์๋์? className์ Link์ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@luisrudge ๋ ์์ง ์๋ํ์ง ์์์ต๋๋ค. ์ง๊ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถฉ๋ถํ์ผ๋ฉฐ styled-jsx๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋์ง ํ ๋ฒ ๋ ์๋ํ๊ฒ ์ต๋๋ค...
์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ฉด ์๋ ค์ฃผ๊ณ ๋ค์ ์ด ์ ์์ต๋๋ค.
@sedubois @kennylavender ์ ์๋ฃจ์ ์ด ์๋ํ์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
pull ์์ฒญ์ ๋ง๋ค์ด nextjs ๋งํฌ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ฅผ ์ง์ํ๋๋ก ํ๊ฑฐ๋ styledcomponents์ ํจ๊ป ์๋ํ๋ ๊ณ ์ ํ ๋ฒ์ ์ nextjs ๋งํฌ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋งํฌ ์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ์ต์ปค ์์์ ์ํ์ ์ ๋ฌํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
nextjs ๋ผ์ฐํฐ ๋ฅผ ๊ฐ์ ธ์์ ์์ ๋ง์ ๋ผ์ฐํฐ๋ฅผ ๋ง๋ ๋ค์ styledcomponents๊ฐ https://www.styled-components.com/docs/basics#styling -any-components ๊ตฌ์ฑ ์์์ ์คํ์ผ์ ์ง์ ํ๋๋ก ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ฐ๋จํ ์๊ฐ ์์ต๋๋ค. ์ด ์ฝ๋๋ฅผ ์ฌ๊ธฐ์ ์ง์ ์์ฑํ์ ๋ฟ์ด๋ฉฐ ํ ์คํธํ์ง ์์์ผ๋ฏ๋ก ์์ ๋ก๋ง ์ฌ์ฉํ์ญ์์ค.
// my-app-link.js
import React from 'react'
import PropTypes from 'prop-types' // Import this from react if your using an older version.
import Router from 'next/router'
const handler = (href) => Router.push(href);
const Link = ({className, children, href, ...rest}={}) => (
<a onClick={() => handler(href)} className={className} {...rest} >{children}</a>
);
Link.propTypes = {
className: PropTypes.string,
href: PropTypes.oneOfType([
PropTypes.object,
PropTypes.string,
]),
children: PropTypes.node,
}
export default Link;
@kennylavender ์ข์ ์ ๊ทผ ๋ฐฉ์์ด์ง๋ง href
์์ฑ์ ๋ ๋๋งํ์ง ์๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค(๋์ onClick
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค). ๊ทธ๋์... ์ด ์ ๊ทผ ๋ฐฉ์์ด SEO์ ์ผ๋ง๋ ์ข์๊ฐ์? ๋ค๋ฅธ ๋์?
๋ ๋์๊ฐ์ผ ํ๋ ์์์ผ ๋ฟ์ ๋๋ค. ๋ด๊ฐ ๊ฒ์ํ ์ฝ๋ ์์ href ์์ฑ์ ์ถ๊ฐํ ์ ์๊ณ ํ์คํ ์ถ๊ฐํด์ผ ํฉ๋๋ค. nextjs/link๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ์ดํด๋ณด๊ณ ์ด๋ป๊ฒ ํ๋์ง ์์๋ณด์ธ์.
์๋ค ์. 3.0.1-beta.13+
๋ฒ์ ์์ passHref ๋ฅผ Link
(๋ถ์ธ ์์ฑ์ผ๋ก)๋ก ์ค์ ํ์ฌ href
๋ฅผ styled-components
(๋๋ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ํํ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๋
ธ์ถํ ์ ์์ต๋๋ค. <a/>
ํ๊ทธ).
๋ฌธ์ ์ ์ฒซ ๋ฒ์งธ ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
const StyledLink = styled.a`
color: red;
background: blue;
`
export default ({ href, name }) => (
<Link prefetch href={href} passHref>
<StyledLink>{name}</StyledLink>
</Link>
)
์ฐธ๊ณ : next-routes
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
export default ({route, params, children}) => (
<Link route={route} params={params} passHref>
<StyledLink>{children}</StyledLink>
</Link>
)
className
์ํ์ ์ง์ Link
๋ก ์ฐํํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฒ์์์ ์คํ์ผ์ ํ์ฅํ ์ ์๋๋ก @vjpr ์๋ฃจ์
์ ๊ฐ์ ํ์ต๋๋ค.
๋งํฌ.js
export default ({ route, params, children, className }) => (
<Link route={route} params={params} passHref>
<StyledLink className={className}>{children}</StyledLink>
</Link>
)
๋ค๋ฅธ ๊ตฌ์ฑ ์์.js
import Link fron 'components/Link';
const RedLink = styled(Link)`
background-color: red;
`
@torresandres ์ ์ฝ๊ฐ ๊ฐ์ ๋ ๋ฒ์ ์ผ๋ก, Link
๋ฅผ ๊ฐ์ ธ์ค๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ด ์ง์ ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ํ์๊ฐ ์๋๋ก ๊ตฌ์ฑ ์์ ๋ด๋ถ์ ๋งํฌ ์คํ์ผ์ ์ง์ ํฉ๋๋ค.
๋งํฌ.js
const StyledLink = styled.a`
//styles
`
export default ({ route, params, href, children, className }) => (
<Link route={route} params={params} href={href} passHref>
<StyledLink className={className}>{children}</StyledLink>
</Link>
);
๋ค๋ฅธ ๊ตฌ์ฑ ์์.js
<Link href="/">Login</Link>
className
๊ฐ Link์ ์ํ์ผ๋ก ์ ๊ณต๋์ง ์๋ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ ์ถ๊ฐํ๊ธฐ ์ํด PR์ ๋ง๋ค๊ณ ์ถ์ง๋ง ๊ทธ๊ฒ์ด ํ์ฉ๋์ง ์๋ ์ด์ ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ต์ ์ฐพ์์ต๋๋ค!
https://github.com/zeit/next.js/pull/1642#issuecomment -292431043
์คํ์ผ ๊ตฌ์ฑ ์์๋ก ๋งํฌ ์คํ์ผ์ ๋ณ๊ฒฝํ๋ ค๋ ์ฌ๋๋ค์ ์ํด
const LinkItem = styled(Link)`
// your style
`;
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค <LinkItem to="/yourComponent">somthing</LinkItem>
์ด๊ฒ์ ์์๋ด๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ ธ์ผ๋ฏ๋ก TLDR์ ์์ฑํ๊ฒ ์ต๋๋ค ๐
TLDR passHref
๋ฅผ <Link>
ํ๊ทธ์ ์ถ๊ฐํ๊ณ ๊ทธ ์์ ์ํ๋ ์คํ์ผ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
์ค์ ์
์์ ๊ตฌ์ฑ์์์์:
<Link href="/login" passHref>
<TopbarLink>Login</TopbarLink>
</Link>
TopbarLink๋ฅผ ์ ์ํ๋ ์คํ์ผ์ด ์ง์ ๋ ๊ตฌ์ฑ ์์ ํ์ผ์์:
export const TopbarLink = styled.a`
// your style
`;
@ferrucc-io ๊ทํ์ ์์ ๋ ์ต์ปค ๋ด์์ ์ต์ปค๋ฅผ ๋ํํฉ๋๋ค. ๋ํ ์ผ๋ฐ์ ์ผ๋ก ๋งํฌ๋ฅผ ๋ฐฐ์นํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๋ ์คํ์ผ์ด ์ง์ ๋ ๋ด๋ถ ๋ฌธ์ ๋ก ์ด๊ธฐ ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ค ์.
3.0.1-beta.13+
๋ฒ์ ์์ passHref ๋ฅผLink
(๋ถ์ธ ์์ฑ์ผ๋ก)๋ก ์ค์ ํ์ฌhref
๋ฅผstyled-components
(๋๋ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ํํ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๋ ธ์ถํ ์ ์์ต๋๋ค.<a/>
ํ๊ทธ).๋ฌธ์ ์ ์ฒซ ๋ฒ์งธ ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.