Для использования компонента с предоставленным ref в React.forwardRef, нужно передать ref в дочерний компонент, используя атрибут `ref`, и передать этот ref внутреннему компоненту через `React.forwardRef`.
Пример реализации компонента `Button` с использованием `React.forwardRef`:
```jsx
import React from 'react';
const Button = React.forwardRef(({ href, children, ...rest }, ref) => {
const linkButton = href ? 'a' : 'button';
return React.createElement(
linkButton,
{
...rest,
ref,
href: href || null
},
children
);
});
export default Button;
```
В данном примере компонент `Button` принимает параметры `href`, `children` и `rest`, а также переданный ref. В зависимости от того, передан ли `href`, компонент создает элемент `a` (для ссылки) или `button` (для кнопки) и передает ему все параметры.
Использование компонента `Button` может выглядеть следующим образом:
```jsx
import React, { useRef } from 'react';
import Button from './Button';
const App = () => {
const buttonRef = useRef(null);
const handleClick = () => {
buttonRef.current.focus();
}
return (
<div>
<Button ref={buttonRef} onClick={handleClick}>Click me</Button>
<Button ref={buttonRef} href="https://example.com">Go to example.com</Button>
</div>
);
}
export default App;
```
В данном примере компонент `Button` позволяет использовать как кнопку с текстом "Click me", так и ссылку на "example.com". И в обоих случаях можно передавать и использовать ref, указывая на элемент `button` или `a` в зависимости от переданных параметров.