12.07 TIL

아름·2023λ…„ 12μ›” 7일
0
post-thumbnail

μ•Œκ³ λ¦¬μ¦˜ μ½”λ“œμΉ΄νƒ€

μ•Œκ³ λ¦¬μ¦˜ 풀이1

μ•„μ›ƒμ†Œμ‹± ν”„λ‘œμ νŠΈ

였늘 μ§„ν–‰ν•œ 것

λ‹‰λ„€μž„ μΆ”κ°€

// Signup.jsx
import { createUserWithEmailAndPassword, updateProfile } from 'firebase/auth';

    const defaultPhotoUrl = '이미지 url';
    try {
      const userCredential = await createUserWithEmailAndPassword(
        auth,
        inputs.email,
        inputs.password
      );
      await updateProfile(userCredential.user, {
        displayName: inputs.nickname,
        photoURL: defaultPhotoUrl
      });
      toast.success('νšŒμ›κ°€μž…μ΄ λ˜μ—ˆμŠ΅λ‹ˆλ‹€!');
      navigate('/login');
    } catch (error) {
      toast.error(errorMsg(error.code));
    }

// νšŒμ›κ°€μž… ν›„ 인풋창 λΉ„μš°κΈ°
    setInputs({
      email: '',
      nickname: '',
      password: ''
    });
  };

ꡬ글 둜그인 μΆ”κ°€, μƒˆλ‘œκ³ μΉ¨ μ‹œμ—λ„ 둜그인 μƒνƒœ μœ μ§€ν•˜κΈ°

// Sign.jsx
import { signInWithEmailAndPassword, signInWithPopup, GoogleAuthProvider } from 'firebase/auth';

  const loginGoogle = async (e) => {
    e.preventDefault();
    const provider = new GoogleAuthProvider();
    try {
      const userCredential = await signInWithPopup(auth, provider);
      toast.success('둜그인 λ˜μ—ˆμŠ΅λ‹ˆλ‹€!');
      localStorage.setItem('accessToken', userCredential.user.accessToken);
      navigate('/');
      dispatch(login(userCredential.user));
    } catch (error) {
      console.log(error.message);
      toast.error('λ‘œκ·ΈμΈμ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ μ‹œλ„ν•΄μ£Όμ„Έμš”.');
    }
  };

React-Toastify둜 μœ νš¨μ„± 검사 μΆ”κ°€ν•˜κΈ°

1. yarn add react-toastify μ„€μΉ˜

yarn add react-toastify

2. react-toastify μ‚¬μš©λ²•

// index.js
import { ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

// ν•„μš”ν•œ νŒŒμΌμ—μ„œ λͺ¨λ“ˆ 뢈러였기
// Signup.jsx
import { toast } from "react-toastify"

// toastify μ•ŒλžŒ μ‹€ν–‰ ν•¨μˆ˜ λ§Œλ“€κΈ°
export default function Signup () {
  const checkInputs = () => {
    if (
      inputs.email.trim().length === 0 ||
      inputs.password.trim().length === 0 ||
      inputs.nickname.trim().length === 0
    ) {
      toast.error('정보λ₯Ό λͺ¨λ‘ μž…λ ₯ν•΄μ£Όμ„Έμš”');
      resetInputs();
      return;
    }
    if (inputs.nickname.length < 2) {
      toast.error('λ‹‰λ„€μž„μ€ 2자 이상이어야 ν•©λ‹ˆλ‹€');
      resetInputs();
      return;
    }
    return true;
  };

3. λ‹€μ–‘ν•œ μ•ŒλžŒ μ‚¬μš©ν•˜κΈ°

// 성곡 μ•ŒλžŒ (μ΄ˆλ‘μƒ‰ μ°½)
const success = () => toast.success("Success!");

// μ‹€νŒ¨ μ•ŒλžŒ (빨간색 μ°½)
const error = () => toast.error("Error!");

// κ²½κ³  μ•ŒλžŒ (λ…Έλž€μƒ‰ μ°½)
const warning = () => toast.warning("Warning!");

// 정보 μ•ŒλžŒ
const info = () => toast.info("Info...");

https://fkhadra.github.io/react-toastify/introduction/
μœ„ μ‚¬μ΄νŠΈμ—μ„œ λ‹€μ–‘ν•œ μ˜΅μ…˜λ“€λ‘œ 데λͺ¨κ°€ κ°€λŠ₯ν•˜λ‹ˆ μ°Έκ³ !

UI λΌˆλŒ€ λ§Œλ“€κΈ°

μ‹€μ „ 적용

// 이전 μ½”λ“œ
const moveLoginPage = (e) => {
  e.preventDefault();
  navigate('/login');
};

<span onClick={moveRegisterPage}>κ°€μž… ν•˜λŸ¬κ°€κΈ°</span>

  span {
   cursor: pointer;
   font-weight: bold;
   color: #f1cc13;
   margin-top: 10px;
  }

// λ°”κΎΌ μ½”λ“œ
<Stlink to="/register">κ°€μž… ν•˜λŸ¬κ°€κΈ°</Stlink>

const Stlink = styled(Link)`
  cursor: pointer;
  font-weight: bold;
  color: #f1cc13;
  margin-top: 10px;
`;

Link

  • <a> νƒœκ·Έλ₯Ό λ§Œλ“€μ–΄μ€Œ
  • 마우슀 μ»€μ„œλ₯Ό κ°–λ‹€λŒ€λ©΄ μ–΄λŠ νŽ˜μ΄μ§€λ‘œ 이동할지 λͺ…μ‹œμ μœΌλ‘œ λ³΄μ—¬μ€Œ

useNavigate

  • <a> νƒœκ·Έλ₯Ό λ§Œλ“€μ§€ μ•Šκ³ , μ½”λ“œλ‘œ νŽ˜μ΄μ§€λ₯Ό 이동함
  • νŽ˜μ΄μ§€ 이동 μ‹œ 좔가적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있음
  • λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œμ—μ„œμ˜ <span> νƒœκ·ΈλŠ” 개발자 λ„κ΅¬λ‘œ μ–΄λŠ νŽ˜μ΄μ§€λ‘œ κ°€λŠ”μ§€ 확인은 λΆˆκ°€ν•¨

였늘 정말 였λ₯˜μ˜ λŠͺμ—μ„œ λ²—μ–΄λ‚˜μ§ˆ λͺ»ν•΄μ„œ 맀우 νž˜λ“€μ—ˆλ‹€γ…Ž 그치만 였λ₯˜λ₯Ό ν•΄κ²°ν•  λ•Œμ˜ κ·Έ μΎŒκ°μ΄λž€....! μ—¬κΈ°κΉŒμ§€ μ§„ν–‰ν•œ κ²ƒλ§ŒμœΌλ‘œλ„ κ°κ²©μŠ€λŸ½μ§€λ§Œ 아직도 κ΅¬ν˜„ν•  게 λ§Žλ‹€^^ μ–΄μ œλ§Œ 해도 거의 λ‹€ ν•œ 쀄 μ•Œμ•˜λŠ”λ° 생각보닀 였래 κ±Έλ¦¬λŠ” κ±° κ°™λ‹€. 내일 λ§ˆμ € λ§ˆλ¬΄λ¦¬ν•˜λŠ” 게 λͺ©ν‘œ! μƒˆλ²½μ— λ‚¨μ•„μ„œ μ½”λ”©ν•˜λ‹€κ°€ 같은 νŒ€μ›λΆ„κ»˜μ„œ 개발자 도ꡬλ₯Ό μ—΄μ–΄μ„œ 속성을 λ³΄λŠ” 법도 μ•Œλ €μ£Όμ‹œκ³  μ’€ 더 μ‹œλ©˜ν‹±ν•˜κ²Œ μ½”λ“œλ₯Ό μ§œλŠ” 법을 μ•Œλ €μ£Όμ…¨λ‹€. μˆ˜μ€€λ³„ μˆ˜μ—… λ•Œ λ°°μ› λ˜ κ°œλ…μ„ ν”„λ‘œμ νŠΈμ—μ„œ 직접 μ μš©ν•΄λ³΄λ‹ˆ ν™• 체감이 됐닀. 항상 λŠλΌλŠ” κ±°μ§€λ§Œ 쒋은 동기λ₯Ό 많이 λ§Œλ‚˜κ²Œ λ˜λŠ” 건 μ°Έ 큰 볡인 κ±° κ°™μŒ!

profile
λ‚΄ κΏˆμ€ 개발자

0개의 λŒ“κΈ€