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 Ref 이해하기
일반적으로 React에서는 부모 컴포넌트와 자식 컴포넌트가 상호작용할 수 있는 수단이 props 밖에 없습니다. 자식을 수정하려면 새로운 props 를 전달하여 자식을 다시 렌더링해야합니다. 하지만 Rea
sambalim.tistory.com
'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 |