import React from 'react';
import PropTypes from 'prop-types';
import * as Style from 'components/Input/Input.styles';
export default function Input ({ status, icon, ...props }) {
return (
<Style.InputContainer>
<Style.Input ref={ref} {...props} />
{icon && <Style.Icon>{icon}</Style.Icon>}
</Style.InputContainer>
);
};
Input.propTypes = {
status: PropTypes.oneOf(['default', 'error']),
icon: PropTypes.element,
};
Input.defaultProps = {
status: 'default',
};
Input 컴포넌트를 만들고 useRef를 사용해서 접근하려고 했지만 이런 오류가 발생했다.
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
구글링을 해보니 부모 컴포넌트에서 자식 컴포넌트의 DOM 요소를 접근할 때는 forwardRef를 사용하여 접근해야 한다고 한다.
해결 방법
import React, { forwardRef } from 'react';
import PropTypes from 'prop-types';
import * as Style from 'components/Input/Input.styles';
const Input = forwardRef(({ status, icon, ...props }, ref) => {
return (
<Style.InputContainer>
<Style.Input ref={ref} {...props} />
{icon && <Style.Icon>{icon}</Style.Icon>}
</Style.InputContainer>
);
});
Input.propTypes = {
status: PropTypes.oneOf(['default', 'error']),
icon: PropTypes.element,
};
Input.defaultProps = {
status: 'default',
};
Input.displayName = 'Input';
export default Input;
참고
https://sambalim.tistory.com/151
'React' 카테고리의 다른 글
[React] 상태 관리 라이브러리의 이해 - Redux 동작 원리 (1) | 2023.02.02 |
---|---|
[React] 상태 관리(feat. React-Query) (0) | 2022.09.03 |
[React] props? state? (0) | 2022.09.01 |
[React] onclick 이벤트와 onblur 이벤트가 동시에 일어난다면 실행 순서가 어떻게 될까? (0) | 2022.07.12 |
[React] FormData로 image와 json 파일을 저장하여 axios 요청을 보냈지만 안되는 문제 (0) | 2022.07.12 |