рдореИрдВрдиреЗ #799 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛, рдореБрдЭреЗ href рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
const StyledLink = styled.a`
color: red;
background: blue;
`
export default ({ href, name }) => (
<Link prefetch href={href}>
<StyledLink href={href}>{name}</StyledLink>
</Link>
)
рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?
next.js 2.3.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдХреНрд░реЛрдо рдореЗрдВ href
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд┐рдирд╛ a
рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдереАред рдЗрд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рд▓рд┐рдВрдХ рдХреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рдЬреЛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╡рд╣ a
рдЯреИрдЧ рдкрд░ рдПрдХ рдЦрд╛рд▓реА href
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ href рдХреЛ рд░рд┐рдХреНрдд рдХреЗ рдмрдЬрд╛рдп рджреВрд╕рд░реА рдмрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдЧрд░ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпреВрдЖрд░рдПрд▓ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдПред
рдЖрдк рдПрдХ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдШрдЯрдХ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
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 рдиреЗ рд╡рд╣ рдХрд╛рдо рдХрд┐рдпрд╛? рдЖрдк рдХреНрд▓рд╛рд╕рдирд╛рдо рдХреЛ рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛
@luisrudge рдиреЗ рдЕрднреА рддрдХ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдЕрднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдерд╛ рдФрд░ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рд╕реАрдзреЗ рд╕реНрдЯрд╛рдЗрд▓-рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ...
рдпрджрд┐ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред
@sedubois рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ @kennylavender рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред
nextjs рд▓рд┐рдВрдХ рдШрдЯрдХ рдХреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг nextjs рд▓рд┐рдВрдХ рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХреЛрдб рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдВрдХрд░ рддрддреНрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдк nextjs рд░рд╛рдЙрдЯрд░ рдЖрдпрд╛рдд рдХрд░рдХреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдШрдЯрдХ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ 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 рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕реНрдЯрдЬ/рд▓рд┐рдВрдХ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рд╣реЗ рд▓реЛрдЧреЛрдВред рд╕рдВрд╕реНрдХрд░рдг 3.0.1-beta.13+
рдкрд░, рдЖрдк $ 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>
)
рдмреЗрд╣рддрд░ @vjpr рд╕рдорд╛рдзрд╛рди, className
рдкреНрд░реЛрдк рдХреЛ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ Link
рдкрд░ рдЫреЛрдбрд╝рдХрд░, рддрд╛рдХрд┐ рд╣рдо рдЙрдирдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рдмрдврд╝рд╛ рд╕рдХреЗрдВ:
Link.js
export default ({ route, params, children, className }) => (
<Link route={route} params={params} passHref>
<StyledLink className={className}>{children}</StyledLink>
</Link>
)
рдЕрдиреНрдпрдШрдЯрдХ.рдЬреЗрдПрд╕
import Link fron 'components/Link';
const RedLink = styled(Link)`
background-color: red;
`
@torresandres рдХрд╛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕рдВрд╕реНрдХрд░рдг, рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдореЗрдВ рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдЬрд┐рд╕реЗ рд╣рдо Link
рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
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>
);
рдЕрдиреНрдпрдШрдЯрдХ.рдЬреЗрдПрд╕
<Link href="/">Login</Link>
рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░рдг рд╣реИ рдХрд┐ className
рд▓рд┐рдВрдХ рдХреЗ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрд╡рд╛рдм рдорд┐рд▓ рдЧрдпрд╛!
https://github.com/zeit/next.js/pull/1642#issuecomment -292431043
рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреА рд╢реИрд▓реА рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
const LinkItem = styled(Link)`
// your style
`;
рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ <LinkItem to="/yourComponent">somthing</LinkItem>
рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ TLDR рд▓рд┐рдЦреВрдВрдЧрд╛
TLDR рдЕрдкрдиреЗ <Link>
рдЯреИрдЧ рдореЗрдВ passHref
рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг
рдореВрд▓ рдШрдЯрдХ рдореЗрдВ:
<Link href="/login" passHref>
<TopbarLink>Login</TopbarLink>
</Link>
рдЯреЙрдкрдмрд╛рд░рд▓рд┐рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реА рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
export const TopbarLink = styled.a`
// your style
`;
@ ferrucc-io рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдВрдХрд░ рдХреЗ рднреАрддрд░ рдПрдВрдХрд░ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХреЛ рдкреЛрдЬрд┐рд╢рди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣реЗ рд▓реЛрдЧреЛрдВред рд╕рдВрд╕реНрдХрд░рдг
3.0.1-beta.13+
рдкрд░, рдЖрдк $Link
href
рд╕реЗstyled-components
(рдпрд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдЗрд╕рдХреЗ<a/>
рдЯреИрдЧ)редрдореБрджреНрджреЗ рдХреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: