์ด๋ฐ์์ผ๋ก ์ฐ์ธก ํ ์์ด์ฝ ํด๋ฆญ ์
input์ด ๋์ค๊ณ ์์ ์ ๋ฐ๋ก ์ ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ฌ๊ธฐ์ ๋๊ฐ์ ์ด์์ฌํญ์ด ์์๋ค.
1. ์ ํจ์ฑ ๊ฒ์ฌ๋ก ์ธํ ๋ฒํผ์ ์์น
2. ์ ์ ๋๋ค์ ์์ ํ ๋ฐ๋ก ์ ์ฉ๋์ง ์๊ณ ์๋ก๊ณ ์นจํด์ผ ๋ณ๊ฒฝ๋๋ ๋ฌธ์
์ค๋ฅ ์ฌํญ์ ๊ธฐ๋กํ์ง ๋ชปํ์ง๋ง
๊ธ์ ์๊ฐ ๋ง์ง ์์ผ๋ฉด ํ๋จ์ ์๋ด ๋ฉ์ธ์ง๋ฅผ ๋ณด์ด๊ฒ ํ๋ค.
ํ์ ์์น๋ฅผ position์ผ๋ก ์ก์๊ธฐ์
ํ๋จ์ ์๋ด ๋ฉํธ๊ฐ ์๊ธฐ๋ฉด ํ์ ์์น๊ฐ ๋ด๋ ค๊ฐ๋ ์ด์๊ฐ ์์๋ค.
input์ฐฝ์ด ๊ณตํต์ผ๋ก ๋ง๋ค์ด์ง ์ปดํฌ๋ํธ๋ผ ์์ ๋ ๊น๋ค๋ก์ ๋ค.
input ์ด๊ณ ๋ซํ์ boolean์ผ๋ก,
์ ํจ์ฑ ๊ฒ์ฌ ์๋ด ๋ฉํธ๋ boolean์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์๋ค.
๊ทธ ๋ ๋ค์๋ ์๊ฐ์ ๊ทธ๋ผ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฃผ๋ฉด ๋๊ฒ ๊ตฌ๋ ์ถ์๋ค.
const WriteBtn = styled.button<IsNickNameT>`
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
position: ${(props) => (props.toggleNickname ? 'absolute' : 'unset')};
top: ${(props) => { (props.toggleNickname ? (props.isValidate ? '45%' : '35%') : 'unset'} ;
}};
right: ${(props) => (props.toggleNickname ? '0.3125rem' : 'unset')};
transform: ${(props) =>
props.toggleNickname ? 'translate(0, -50%)' : 'unset'};
`;
์ด๋ ๊ฒ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฃผ๋ ๊ฐ๋จํ๊ฒ ํด๊ฒฐ ํ ์ ์์๋ค.
toggleNickname
์ ๋๋ค์ ์์ ์๋ ๋ฒํผ ํด๋ฆญ ์ฌ๋ถ์ด๊ณ
isValidate
๋ ์ ํจ์ฑ ์ฌ๋ถ์ ๋ํ boolean๊ฐ์ด๋ค.
์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ๋์ค๋๋ฐ
์ผํญ ์ฐ์ฐ์๋ฅผ ์ค์ฒฉ์ผ๋ก ์ฌ์ฉํ๋๊ฑด ์ข์ง ์๋ค๊ณ ํ๋ค.
๋ง์ eslint๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด ๋ชจ๋ฅธ์ฒด ๋์ด๊ฐ์ ๊ฑฐ๋ค.
const WriteBtn = styled.button<IsNickNameT>`
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
position: ${(props) => (props.toggleNickname ? 'absolute' : 'unset')};
top: ${(props) => {
if (props.toggleNickname) {
return props.isValidate ? '45%' : '35%';
}
return 'unset';
}};
right: ${(props) => (props.toggleNickname ? '0.3125rem' : 'unset')};
transform: ${(props) =>
props.toggleNickname ? 'translate(0, -50%)' : 'unset'};
`;
if๋ฌธ์ ์ค์ ํด๊ฒฐ ํ๋ค.
๋ฆฌ์กํธ๋ if๋ฌธ ๋ณด๋ค ์ผํญ ์ฐ์ฐ์๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค ๋ณด๋ ์ด์ค ์กฐ๊ฑด๋ฌธ ์์ฑํ ๋์๋
์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๊ฑฐ ๊ฐ๋ค.
๊ทธ๋ ๊ฒ ์์ ๋ ํ๋ฉด
useRef๋ฅผ ์ด์ฉํด input value๊ฐ์ ์ ๋ฌํ๊ณ ์์๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋
const paintNickname = (e: React.FormEvent<HTMLFormElement>) => {
if (isName) {
e.preventDefault();
mutation.mutate(memNicknameRef.current.value);
setToggleNickname(!toggleNickname);
}
};
๋๋ค์ ์์ ํ๋ฉด memNicknameRef.current.value
์ ๊ฐ์ด null
๋ก ๋์
๋ฐ๋ก ์์ ๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ์ง ์์๋ค.
์๊ณ ๋ณด๋ toggleNickname
์ ์ด์ฉํด input์ ๋ณด์ด๊ฒ, ์๋ณด์ด๊ฒ ์์ฑํ๋๋ฐ.
ref={memNicknameRef}
๋ input์๋ง ์์ด์
์ํฐ ์น ๊ฒฝ์ฐ input์ฐฝ๋ ์ฌ๋ผ์ง๊ณ ๋ด๊ฒจ์ ธ ์๋ value๋ ์ฌ๋ผ์ง๋ ๊ฒ์ด์๋ค.
ํ์ฐธ ๊ณ ๋ฏผํ๋ค. ๊ทธ๋ผ ์ฌ๋ผ์ง๊ธฐ ์ ์ ๊ทธ ๊ฐ์ ์ ์ฅํด ๋ณด๋ด์ฃผ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
const [nickName, setNickName] = useState<string>('');
๋ณ๊ฒฝ๋ ์ ์ ๋๋ค์์ ์ ์ฅํ state๋ฅผ ์ ์ธํด ์ฃผ์๋ค.
useEffect(() => {
if (memNickname && memNicknameRef.current) {
dispatch(setUserOAuthActions.paintMemNickname(memNickname));
memNicknameRef.current.value = memNickname;
setNickName(memNicknameRef.current.value);
}
}, [dispatch, memNickname, memNicknameRef, nickName]);
useEffect์ ์ด์ฉํด nickName
์ด ๋ณ๊ฒฝ๋ ๋ ๋ ๋๋ง ๋๋๋ก ํ์ผ๋ฉฐ
memNickname
์ ์๋ฒ์ ์ ์ฅ๋ ๋ด์ฉ์ด๊ณ
nickName
์ ์์ ๋๊ฑธ ํ๋ฉด์ ๋ฐ๋ก ๋ณด์ฌ์ง๊ฒํ๋ ค๊ณ ๋๋ ๋จ๋ค.
const paintNickname = (e: React.FormEvent<HTMLFormElement>) => {
if (isName) {
e.preventDefault();
mutation.mutate(nickName);
setToggleNickname(!toggleNickname);
}
};
์์ ๋ ๋๋ค์์ด ์ ์ฅ๋ nickName
๋ฅผ ์๋ฒ์ ๋ณด๋ด ์คฌ๋ค.
<UserNickname>
{nickName === '' ? userAuthInfo?.memberNickname : nickName}
</UserNickname>
nickName์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์๋ฒ์ ์ ์ฅ๋์ด ์๋ ์ ์ ๋๋ค์์,
๊ทธ๊ฒ ์๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝํ ๋๋ค์์ ๋ณด์ฌ์ฃผ๊ฒ ๋ง๋ค์๋ค.
๊ทธ๋ ๊ฒ ์์ฑ!
์ถํ ๋ฉ์ธ ํ๋ก์ ํธ๊ฐ ๋ง๋ฌด๋ฆฌ ๋๋ค๋ฉด ๋๋ค์ ์์ ์ ์กฐ๊ฑด์ ๋ฌ๊ณ ์ถ๋ค.
ํ๋ฃจ์ ๋ช๋ฒ์ด๋ ์์ ์ด ๊ฐ๋ฅํ๋ฉด ๋ฒ์ฃ์ ์ด์ฉํ ์๋ ์๊ณ ์๋ฒ์์๋ ๋ถ๋ด์ด ๋๋ค๊ณ ์๊ฐํ๋ค.
ํ๋ฃจ ๋๋ ์ผ์ฃผ์ผ ๋ฑ ์์ ๊ฐ๋ฅํ ๊ฐ์์ ๊ธฐ๊ฐ์ ์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์ปค๋ฎค๋์ผ์ด์ ์ด ์๊ธฐ์ ๋น๋ฐฉ์ฉ ๋๋ค์์ด ๋ค์ด๊ฐ๋ ๊ฑธ ๋ฐฉ์งํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋ธ๋ก๊น ์ ๊ฑฐ์ ์์ ์ ๋ค ํ๊ณ ์ ๋ค๊ธฐ ์ ์ ์์ฑ์ํ๋ค.
๋ด๊ฐ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฅ์ณค๊ณ ์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํด ๋
ธ๋ ฅํ ์ ์ ์์ฑํ๊ณ ์ถ์ด๋
๊ธฐ๋กํ ์ ์์ด ๊น๋จน๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๊ณ ์์
ํ๋ฉด์ ์ค๊ฐ ์ค๊ฐ ๋ธ๋ก๊ทธ ์์ฑํ๊ธฐ์ ์์
ํจ์จ์ด ๋จ์ด์ง๋ค...
์ด๋ถ๋ถ์ด ๊ณ ๋ฏผ์ธ๊ฑฐ ๊ฐ๋ค.