<Link/>
рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
V8 => v9 рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдРрд╕рд╛ рд╣реБрдЖред
рдкреНрд░рдЬрдирди рд░реЗрдкреЛ: https://github.com/nickluger/nextjs-link-ref-functional-n-
<Link/>
рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╣реБрдд рдЕрдзрд┐рдХ / рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рднреАред рдпрджрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ:
<Link href="/href">
<Button
type="custom"
color="#FCFCFC"
>
buttonText
</Button>
</Link>
рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:
<Link href="/href">
<button
type="custom"
color="#FCFCFC"
>
buttonText
</button>
</Link>
<Link href="/href">
<a>
<Button
type="custom"
color="#FCFCFC"
>
buttonText
</Button>
</a>
</Link>
рдХреНрдпрд╛ рдЗрд╕ рдмрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ? рд╣рдо рдЗрд╕реЗ 9 рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣рд╛рдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдмрд╕ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдпрд╣ 9.0.3 рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрдХреНрдХрд░: /
рдЖрдк рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
// TODO: Muting error, fix as soon as zeit/next.js/issues/7915 resolved
const originalError = console.error;
console.error = (...args) => {
if (/Warning.*Function components cannot be given refs/.test(args[0])) {
return;
}
originalError.call(console, ...args);
};
рдореИрдВ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП <Link/>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк ref
рдХреЛ рдЗрд╕ рддрд░рд╣ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const CustomComponent = React.forwardRef(function CustomComponent(props, ref) {
return (
<div/>
);
});
<Link href={"/"}>
<CustomComponent/>
</Link>
рдЪреЗрддрд╛рд╡рдиреА рджреЗрдХрд░ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ 9.0.4-canary.2
рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдХрдВрд╕реЛрд▓ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИред рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
Check the render method of `Link`.
@ th0th рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ React.forwardRef
рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣:
import React from 'react'
import Link from 'next/link'
const CustomComponent = React.forwardRef((props, ref) => (
<a ref={ref} {...props}>
Click
</a>
))
export default () => (
<Link href='/' passHref>
<CustomComponent/>
</Link>
)
Link
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдВ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди, рдХрдо рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрдо рд╕реЗ рдХрдо <Link href="/" forwardRef>...</Link>
рдЬреИрд╕рд╛ рдХреБрдЫ?
@Nickluger рд╕реЗ рд╕рд╣рдордд рдпрд╣ рдХрд╛рдЙрдВрдЯрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЕрдиреНрдп рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ forwardRef
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╢рд╛рдпрдж рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреА рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ forwardRef
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп React.forwardRef
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ?
рд╣рд╛рдВ @nickluger рд╕реЗ рд╕рд╣рдордд Link
рдЕрдВрджрд░ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдж рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ (@ijjk) рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдФрд░ рдирд╛рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдЦреЛрд▓ рджрд┐рдпрд╛ рд╣реИ?
рдореБрдЭреЗ рднреАред рдпрджрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ:
<Link href="/href"> <Button type="custom" color="#FCFCFC" > buttonText </Button> </Link>
рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:
<Link href="/href"> <button type="custom" color="#FCFCFC" > buttonText </button> </Link> <Link href="/href"> <a> <Button type="custom" color="#FCFCFC" > buttonText </Button> </a> </Link>
рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдПрдХ рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛:
Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a>.
рдЬрдм рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ рдЬреЗрдПрд╕ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ред рдХреНрдпрд╛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреЛрдИ рдлрд┐рдХреНрд╕ рд╣реИ?
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдлреЙрд░рд╡рд░реНрдб рд░реАрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдореЗрд░реЗ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯреЗрдВред рдореЗрд░рд╛ рдмрдЯрдиред Js рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрди рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ ...ред
const Button = (props) => {
return (<stuff />)
}
export default React.memo(Button)
рдКрдкрд░ рджреЗрдЦреЗрдВ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдЦреЛрд▓рд╛: https://github.com/zeit/next.js/issues/8962
рдЬрдм рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ рдЬреЗрдПрд╕ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ред рдХреНрдпрд╛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреЛрдИ рдлрд┐рдХреНрд╕ рд╣реИ?
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдлреЙрд░рд╡рд░реНрдб рд░реАрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдореЗрд░реЗ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯреЗрдВред рдореЗрд░рд╛ рдмрдЯрдиред Js рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрди рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ ...ред
const Button = (props) => { return (<stuff />) } export default React.memo(Button)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
import {forwardRef} from 'react';
const Button = forwardRef(props, ref) => {
return (<stuff ref={ref} />)
}
рдЖрдЧреЗ рдХреЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдПред рдбреЙрдХреНрд╕ рдиреЗ https://nextjs.org/docs#forcing -the-link-to-expose-href-to-its-child рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реИ
<Link
href={href}
>
<a>
{text}
</a>
</Link>
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдмрд╣реБрдд рд╡рд┐рд╖рдо рджрд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрджред)
9.0.2 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛
<a></a>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди a11y рдФрд░ рд╕рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рдЬреИрд╕реЗ "href рд╣реИ рдЪрд╛рд╣рд┐рдП", рдЖрджрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: 15mn рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛, рдпрд╣ рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рдмрд░реНрдмрд╛рджреА, рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд╛рд╡рдЬреВрдж рдареАрдХ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд▓рдЧрддрд╛ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, https://github.com/zeit/next.js/issues/7915#issuecomment -511792629 рдкрд░ рдЬрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдПрдХ рдЕрд╕рд░ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
import React, { Fragment, useRef } from 'react';
import { MyFunctionalComponent } from './my-functional-component';
const App = props => {
const myRef = useRef();
return (
<Link href={href}>
<Fragment>
<MyFunctionalComponent ref={myRef} />
</Fragment>
</Link>
);
}
рдЬрд╣рд╛рдБ <MyFunctionalComponent>
рдлреЙрд░рд╡рд░реНрдб рд░реЗрдлрд░реА:
import React, { forwardRef } from 'react';
const MyFunctionalComponent = forwardRef(props, ref) => (
<div ref={ref} />
);
рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд HTML рд░реИрдкрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ ( <div />
) рдФрд░ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
@ Hill84 рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ myRef
рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ?
@Vadorequest рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рджрд┐рдП рд╣реИрдВред
@ Hill84 рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛:
`` `
const ButtonLink: рдПрдлрд╕реА
<
@ Hill84 рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛:
const ButtonLink: FC<ButtonLinkProps> = ({ children, href, ...props }) => ( <Link href={href}> <><Button link {...props}>{children}</Button></> </Link> );
рдореИрдВ <><Component/></>
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп <div></div>
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдПрдХ рдШрдЯрдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЙрдкрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ:
const propsUserBtn = user => ({
className: "h-10 w-10 font-black rounded-full bg-orange-200 text-teal-700",
title: user.first_name + ' ' + user.last_name,
children: (user.first_name.charAt(0) + user.last_name.charAt(0)).toUpperCase()
})
<Link href='/profile'>
<button { ...propsUserBtn(user) } />
</Link>
рдЬрд╛рдБрдЪ рдХреА, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдХреНрдпреЛрдВ рдЗрд╕ рд░реЗрдлрд░реА рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдореЗрдВ href
рдХреЗ рд╕рд╣реА рд╕реНрдерд╛рди рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм passHref
рдХрд╛ рдЙрдкрдпреЛрдЧ <Link />
?
рдпрд╣ рд╕реБрдкрд░ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЗ рдореВрд▓ рдореЗрдВ <a>
рдФрд░ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ... рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдмрд▓реНрдХрд┐ рдпрд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдбрд╝ рдореЗрдВ рд▓рдВрдЧрд░ рд╣реИ рдФрд░ рдЗрд╕ рдкреВрд░реЗ ref
рдбрд┐рдЬрд╛рдЗрди рд╕реЗ рдмрдЪреЗрдВред
React.forwardRef
рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рд╡рд╣ рдмреЛрдЭрд┐рд▓ рдЪреАрдЬ рд╣реИ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдВрдЯрд░ рдХреЗ рд╕рд╛рде рдирд░рдХ рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИ #
рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдШрдЯрдХ рдореЗрдВ href
рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред <Link href="/" passHref useRef />
?
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЛ рд░реЗрдлрд░реА рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рджреЛрд╣рд░рд╛рд╡рджрд╛рд░ рднреА рд╣реИред
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЛ div
рддрддреНрд╡ рдХреЗ рд╕рд╛рде @ namlq93 рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдореБрдЭреЗ рднреАред рдпрджрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ:
<Link href="/href"> <Button type="custom" color="#FCFCFC" > buttonText </Button> </Link>
рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:
<Link href="/href"> <button type="custom" color="#FCFCFC" > buttonText </button> </Link> <Link href="/href"> <a> <Button type="custom" color="#FCFCFC" > buttonText </Button> </a> </Link>
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрдд !!
рдПрдХ рд╕рдорд╛рди рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБ
рдЕрднреА рддрдХ рд╡рд╣реАрдБ
https://nextjs.org/docs/api-reference/next/link#if -the-child-is-a-function-Components
рдпрд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИред
рдореИрдВ рдЕрдЧрд▓реЗ рджрд┐рди рдХреЙрдиреНрдлреНрд░реЗрдВрд╕ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдХрд┐ рджреВрд╕рд░реЗ рджрд┐рди "рд╡рд╛рд╣ рдиреЗрдХреНрд╕реНрдЯ рдЗрдЬ рдж рдлреНрдпреВрдЪрд░" рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЗрдХреНрд╕реНрдЯ рдФрд░ рд╡рд░реНрд╕реЗрд▓ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рдХреАрд▓ рдмрдиреЛред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдЬреИрд╕реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рдХрдИ рдмрд╛рд░ рдкреВрд░реЗ рдореБрджреНрджреЛрдВ рдкрд░ рджреЗрдЦрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рдеред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ 3 рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдорд╣рд╛рди рдбреАрдПрдХреНрд╕ рдирд╣реАрдВ рд╣реИред
React.forwardRef
рдореЗрдВ рд▓рдкреЗрдЯреЗрдВред рдпрд╣ рдмрд╣реБрдд рджреЛрд╣рд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИdiv
, span
, a
, рдЖрджрд┐ рдЬреИрд╕реЗ рдЯреИрдЧ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд▓рдкреЗрдЯреЗрдВrouter.push
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рднреА рдЕрдЬреАрдм рд╣реИрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрд╛ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ / рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЖрдХрд╕реНрдорд┐рдХ рд╣рдЯрд╛рдиреЗ / рд╕рдлрд╛рдИ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
Link
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдВ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди, рдХрдо рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрдо рд╕реЗ рдХрдо<Link href="/" forwardRef>...</Link>
рдЬреИрд╕рд╛ рдХреБрдЫ?