@seoultech.ac.kr
이 입력되는지 확인논리 && 연산자
: JS 에서 true&&expression
은 항상 true, false&&expression
은 항상 false<input>
의 onBlur
과 onFocus
를 사용해 봄const [isInput, setIsInput] = useState(false);
state 값을 이렇게 최초에 false로 주고,// Login/index.jsx
const handleFocus = (e) => {
if (isInput) {
console.log("false");
setIsInput(false); // 최초에 false였으니까..
} else {
console.log("true");
setIsInput(true);
}
};
onBlur
와 onFocus
모두 handleFocus
가 핸들링 하도록 했다. 최초 값 (focus 없음)이 false이기 때문에 input 창을 누르면, else를 통해 true가 되고, 다시 focus를 잃으면 onBlur가 해당 함수를 호출하면서 false로 만든다.
감이 잘 오지 않아서 console.log()
를 통해 값을 찍어 봤다.
클릭을 해보면서 state가 어떻게 변하는지 관찰해 볼 수 있었다.
styled.div
는 div
뿐 만 아니라 a
나 span
등 여러가지가 가능// Auth/index.jsx
<MainWrapper>
<TopNavigation activePage="auth" />
</MainWrapper>
이렇게 현재 페이지 이름을 넘겨주면, TopNavigation에서는 페이지별로 매핑을 해주고 (매핑이 좀 비효율적 방법으로 된 것 같긴한데,, 전에 짜둔부분이라 그냥 맞춰서 했다...ㅎ..)
// TopNavigation.jsx
const mapPageToNavi = {
messageBox: <MessageBoxNavigation />,
main: <MainNavigation />,
myPage: <MyPageNavigation />,
join: <XvectorNavigation pageName="회원가입" />,
auth: <XvectorNavigation pageName="학교 인증" back="/mypage" />,
updateNick: <XvectorNavigation pageName="닉네임 변경" back="/mypage" />,
authDetail: <XvectorNavigation pageName="이메일 인증" back="/mypage" />,
};
const TopNavigation = ({ activePage }) => {
return <NavigationWrapper>{mapPageToNavi[activePage]}</NavigationWrapper>;
};
// XvectorNavigation.jsx
const XvectorNavigation = ({ pageName, back }) => {
return (
<MainWrapper>
<h1>{pageName}</h1>
<Link to={back}>
<img src={xVector} alt="닫기" />
</Link>
</MainWrapper>
);
};
페이지 이름과 x를 누를시 어느 페이지로 이동할지 알려줬다.
<Route exact path="/mypage" component={MyPage} />
<Route exact path="/mypage/updateNickname" component={UpdateNickname} />
<Route exact path="/mypage/auth" component={Auth} />
<Route exact path="/mypage/auth/detail" component={AuthDetail} />
이런식으로 해서.... 너무 비효율적으로 mypage를 반복적으로 적어줬는데.. 더 좋은 방법이 있을 것 같다. 내일 찾아봐야지!
const seoultech = "@seoultech.ac.kr"; // 학교 이메일 주소
const patternEngNum = /[a-zA-Z0-9]/;
if (!value.includes(seoultech) || !patternEngNum.test(value)) {
setIsError(true);
} else {
setIsError(false);
}
setEmail(value);
};
휴 이제 리액트 쫌 안다고 어디가서 말할 수 있을 것...같다...ㅎㅎ..ㅎㅎ..