[TIL] 221105

BeanxxΒ·2022λ…„ 11μ›” 6일
0

TIL

λͺ©λ‘ 보기
91/120
post-thumbnail

πŸ”₯ 였늘 ν•œ 일

  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 2022 Winter Coding μ½”ν…Œ 10:00~12:00
  • [Udemy React] Section12-13(μ΅œμ ν™” 기법, ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ)
  • [JS Deep Dive] Chapter13(μŠ€μ½”ν”„) p.189~199
  • [BearMello] SweetAlert2 μ΄μš©ν•˜μ—¬ Modal, Alertμ°½ μΆ”κ°€

🧚 μ•Œκ²Œ 된 λ‚΄μš©

πŸ’‘React.memo()

  • 인자둜 λ“€μ–΄κ°„ μ»΄ν¬λ„ŒνŠΈμ— μ–΄λ–€ propsκ°€ λ“€μ–΄κ°€λŠ”μ§€ ν™•μΈν•˜κ³ ,
    μž…λ ₯λ˜λŠ” λͺ¨λ“  props의 μ‹ κ·œ 값을 ν™•μΈν•œ λ’€ 이λ₯Ό κΈ°μ‘΄ props κ°’κ³Ό λΉ„κ΅ν•˜λ„λ‘ λ¦¬μ•‘νŠΈμ—κ²Œ 전달함
  • props 값이 바뀐 κ²½μš°μ—λ§Œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž¬μ‹€ν–‰ 및 μž¬ν‰κ°€ν•˜κ²Œ 됨
  • λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ³€κ²½λ˜μ—ˆμ§€λ§Œ κ·Έ μ»΄ν¬λ„ŒνŠΈμ˜ props 값이 λ°”λ€Œμ§€ μ•Šμ•˜λ‹€λ©΄ μ»΄ν¬λ„ŒνŠΈ 싀행은 skip
export default React.memo(DemoOutput);

πŸ’‘useCallback()

μ»΄ν¬λ„ŒνŠΈ μ‹€ν–‰ μ „λ°˜μ— 걸쳐 ν•¨μˆ˜λ₯Ό μ €μž₯ν•  수 있게 ν•˜λŠ” ν›…
즉, 맀번 μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μž¬μƒμ„±ν•  ν•„μš”κ°€ μ—†λ‹€λŠ”κ±Έ μ•Œλ¦΄ 수 있음
πŸ‘‰ λ™μΌν•œ ν•¨μˆ˜ 객체가 λ©”λͺ¨λ¦¬μ˜ λ™μΌν•œ μœ„μΉ˜μ— μ €μž₯λ˜λ―€λ‘œ 비ꡐ μž‘μ—…μ΄ κ°€λŠ₯해짐

  • μš°λ¦¬κ°€ μ„ νƒν•œ ν•¨μˆ˜λ₯Ό λ¦¬μ•‘νŠΈ λ‚΄λΆ€ μ €μž₯곡간에 μ €μž₯ν•΄μ„œ ν•¨μˆ˜ 객체가 싀행될 λ•Œλ§ˆλ‹€ 이λ₯Ό μž¬μ‚¬μš©ν•  수 있게 ν•΄μ€Œ
const toggleParagraphHandler = useCallback(() => {
    setShowParagraph((prevShowParagrah) => !prevShowParagrah);
  }, []);

πŸ’‘useMemo()

useCallback()κ³Ό μ‚¬μš©λ²•, 역할이 λΉ„μŠ·ν•˜μ§€λ§Œ λͺ¨λ“  μ’…λ₯˜μ˜ 데이터λ₯Ό μ €μž₯ν•  수 있음

const sortedList = useMemo(() => {
  return items.sort((a, b) => a - b);
}, [items]);

πŸ’‘μ»΄ν¬λ„ŒνŠΈ 수λͺ… μ£ΌκΈ°

  • componentDidMount()

    • λ¦¬μ•‘νŠΈκ°€ μ»΄ν¬λ„ŒνŠΈκ°€ 마운트된 직후에 이 λ©”μ†Œλ“œλ₯Ό 호좜
    • 즉, μ»΄ν¬λ„ŒνŠΈκ°€ ν‰κ°€λ˜κ³  DOM에 λ Œλ”λ§λ  λ•Œ 호좜
    • = useEffect(...,[])

  • componentDidUpdate()

    • μ»΄ν¬λ„ŒνŠΈκ°€ κ°±μ‹ λ˜λ©΄ 호좜됨
      (무언가 μƒνƒœκ°€ λ³€κ²½λ˜μ–΄ μ»΄ν¬λ„ŒνŠΈκ°€ μž¬ν‰κ°€ & μž¬λ Œλ”λ§λ˜λ©΄ 호좜됨)
    • = useEffect(..., [someValue])

  • componentWillUnmount()

    • μ»΄ν¬λ„ŒνŠΈκ°€ DOMμ—μ„œ μ‚­μ œλ˜κΈ° 직전에 호좜
    • μ»΄ν¬λ„ŒνŠΈκ°€ DOMμœΌλ‘œλΆ€ν„° μ‚­μ œλ˜κΈ° 전에 λ‹€μ‹œ 호좜됨
    • = useEffect(() => { return () => {...}}, [])

🎨 SweetAlert2 적용

κΈ°λ³Έ alert창이 λ„ˆλ¬΄ μ•ˆ μ˜ˆλ»μ„œ modalμ΄λž‘ alert창을 μƒˆλ‘œ λ§Œλ“€λ €κ³  μ°Έκ³ ν• λ§Œν•œ λ””μžμΈλ“€μ„ 찾아보닀가 SweetAlertλΌλŠ” λͺ¨λ‹¬ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ νŽΈλ¦¬ν•  것 κ°™μ•„μ„œ μ‚¬μš©ν•΄λ³΄μ•˜λ‹€!

npm install sweetalert2

πŸ”— SweetAlert2 κ³΅μ‹λ¬Έμ„œ
μ—¬λŸ¬ κΈ°λ³Έ μ•„μ΄μ½˜λ„ 넣을 수 μžˆμ–΄μ„œ 보닀 더 예쁜? Alertμ°½ κ΅¬ν˜„ κ°€λŠ₯ :>

  1. κΈ°λ³Έ Alertμ°½
    Swal.fire({
      icon: "success",
      text: "리뷰λ₯Ό μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.",
      button: "확인",
    }).then(() => {
      window.location.reload();
    }); // then()을 톡해 Alertμ°½μ—μ„œ ν™•μΈλ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μƒˆλ‘œκ³ μΉ¨μ΄ λ˜λ„λ‘ ν•  수 μžˆλ‹€.
    // then() 없이 κ·Έλƒ₯ μƒˆλ‘œκ³ μΉ¨ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ Alert창이 보이기도 전에 μƒˆλ‘œκ³ μΉ¨μ΄ λ˜μ–΄λ²„λ¦°λ‹€.. 
  1. 확인, μ·¨μ†Œ λ²„νŠΌμ΄ μžˆλŠ” λͺ¨λ‹¬μ°½
    πŸ”— [참고자료] How do I change text color in SweetAlert2?

    import Swal from "sweetalert2";
    
    Swal.fire({
      icon: "warning",
      title:
        "<p style='font-size:18px'>" + "ν•΄λ‹Ή 리뷰λ₯Ό μ‚­μ œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?" + "</p>",
      // κΈ€μž 크기가 λ„ˆλ¬΄ μ»€μ„œ 쀄일 방법을 μ°Ύλ‹€κ°€ μ΄λ ‡κ²Œ ν•˜λ‹ˆκΉŒ 적용이 λ˜μ—ˆλ‹€!
      showCancelButton: true,
      confirmButtonText: "확인",
      cancelButtonText: "μ·¨μ†Œ",
      confirmButtonColor: "#AD8B73",
      cancelButtonColor: "#BEBCBA",
    }).then((result) => {
      if (result.isConfirmed) {
        onRemovePost();
      }
    });

  1. κΈ°λ³Έ Alert창보닀 μž‘μ€ Toastμ°½

    κΈ°λ³Έ λͺ¨λ‹¬μ°½μ€ λŒ€μ²΄μ μœΌλ‘œ 크기가 큰데 κ°„λ‹¨ν•œ alert창을 μ›ν•˜λŠ” 경우 toast 속성을 μ‚¬μš©ν•˜λ©΄ Toast처럼 μ»€μŠ€ν…€μ΄ κ°€λŠ₯ν•˜λ‹€.

    import Swal from "sweetalert2";
    
    const Toast = Swal.mixin({
      toast: true, // <- here!!
      position: "top", // μœ„μ— μœ„μΉ˜ν•˜λ„λ‘
      showConfirmButton: false, // 확인 λ²„νŠΌ 없도둝
      timer: 3000, // 3초 후에 사라지도둝
      timerProgressBar: true, // μ‹œκ°„ 진행바 지정
      width: "400px", // λ„ˆλΉ„ 지정
      didOpen: (toast) => {
        toast.addEventListener("mouseenter", Swal.stopTimer);
        toast.addEventListener("mouseleave", Swal.resumeTimer);
      },
    });
    
    export default Toast;

✍️ Diary

μ½”ν…Œ μ—°μŠ΅κ²Έ μ½”ν…Œλ₯Ό λ΄λ΄€λŠ”λ° μ—­μ‹œλ‚˜ μ½”ν…ŒλŠ” μ–΄λ ΅λ‹€.. 첫문제만 톡과,,
μ½”ν…Œ μ‹€λ ₯은 μ–Έμ œ λŠλ €λ‚˜~ πŸ₯²

profile
FE developer

0개의 λŒ“κΈ€