[TIL]231214_์•Œ๊ณ ๋ฆฌ์ฆ˜, react-toastify

ใ…‡ใ…–ใ…ˆใ…ฃยท2023๋…„ 12์›” 14์ผ
1

Today I Learned

๋ชฉ๋ก ๋ณด๊ธฐ
43/93
post-thumbnail

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Today Learn

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2๋ฌธ์ œ
  • typescript ๊ณผ์ œ

๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์ง€๋งŒ TIL์ œ์ถœํ•˜๋Š”๊ฒƒ์ด ๋ฐ”๋น ์„œ ๊ฒฐ๊ตญ ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋Œ€์ฒด ใ… ใ…  ์ฃผ๋ง์— TypeScript๋ฅผ ๊ณต๋ถ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค!

๐Ÿ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด

๋ฌธ์ œ 1) ๋ฌธ์ž์—ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ

๋ฌธ์ž์—ด s์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž๋ฅผ ํฐ๊ฒƒ๋ถ€ํ„ฐ ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
s๋Š” ์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋Œ€๋ฌธ์ž๋Š” ์†Œ๋ฌธ์ž๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

function solution(s) {
    
    const array = s.split('')
    answer = array.sort((a,b) => a>b ? -1 : 1).join('')
    
    return answer
}

๋ช‡๋ฒˆ ์‚ฌ์šฉํ•ด๋ดค๋˜ split() , join() ๋ฉ”์„œ๋“œ์™€ sort ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์–ด๋ณด์•˜๋‹ค!


๋ฌธ์ œ 2) ๋ถ€์กฑํ•œ ๊ธˆ์•ก ๊ณ„์‚ฐํ•˜๊ธฐ

์ƒˆ๋กœ ์ƒ๊ธด ๋†€์ด๊ธฐ๊ตฌ๋Š” ์ธ๊ธฐ๊ฐ€ ๋งค์šฐ ๋งŽ์•„ ์ค„์ด ๋Š์ด์งˆ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋†€์ด๊ธฐ๊ตฌ์˜ ์›๋ž˜ ์ด์šฉ๋ฃŒ๋Š” price์› ์ธ๋ฐ, ๋†€์ด๊ธฐ๊ตฌ๋ฅผ N ๋ฒˆ ์งธ ์ด์šฉํ•œ๋‹ค๋ฉด ์›๋ž˜ ์ด์šฉ๋ฃŒ์˜ N๋ฐฐ๋ฅผ ๋ฐ›๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ฒ˜์Œ ์ด์šฉ๋ฃŒ๊ฐ€ 100์ด์—ˆ๋‹ค๋ฉด 2๋ฒˆ์งธ์—๋Š” 200, 3๋ฒˆ์งธ์—๋Š” 300์œผ๋กœ ์š”๊ธˆ์ด ์ธ์ƒ๋ฉ๋‹ˆ๋‹ค.
๋†€์ด๊ธฐ๊ตฌ๋ฅผ count๋ฒˆ ํƒ€๊ฒŒ ๋˜๋ฉด ํ˜„์žฌ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธˆ์•ก์—์„œ ์–ผ๋งˆ๊ฐ€ ๋ชจ์ž๋ผ๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.
๋‹จ, ๊ธˆ์•ก์ด ๋ถ€์กฑํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ return ํ•˜์„ธ์š”.

ํ’€์ด

function solution(price, money, count) {
    let totalMoney = 0;
    for (let i=1; i<= count; i++){
       totalMoney += price*i
    } 
    const result = money - totalMoney
    return result < 0 ? result * -1 : 0 
}

๐Ÿคฆ๐Ÿปโ€โ™€๏ธ ๊ณ ๋ฏผํ•œ ๋ถ€๋ถ„

๋ฌธ์ œ2๋ฒˆ์„ ํ’€๋•Œ ๋งˆ์ง€๋ง‰ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ๋ถ€๋ถ„์— ์ฒ˜์Œ์—๋Š” money > result ๋กœ ๋น„๊ตํ–ˆ์—ˆ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํ–ˆ์„๋•Œ๋Š” ํ†ต๊ณผํ–ˆ์—ˆ์ง€๋งŒ ์ œ์ถœํ•˜๋‹ˆ๊นŒ ํ…Œ์ŠคํŠธ4๋ฒˆ์—์„œ ์‹คํŒจ๊ฐ€ ๋–ด์—ˆ๋‹ค.

์–ด๋–ค ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ง€ ํ—ค๋งค๋˜์ค‘ ์Šคํ„ฐ๋””์›์˜ ๋„์›€์œผ๋กœ result < 0 ์œผ๋กœ ๋ฐ”๊ฟจ๋”๋‹ˆ ์„ฑ๊ณตํ•˜์˜€๋‹ค.
๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ˆ์ด๋ž‘ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ 0์„ ๊ธฐ์ค€์œผ๋กœ ์Œ์ˆ˜๋ฉด ๊ทธ ์ˆซ์ž ๊ทธ๋Œ€๋กœ ์–‘์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์–‘์ˆ˜๋ฉด 0์„ return ํ•ด์ฃผ๋„๋ก ํ•œ๊ฒƒ์ด๋‹ค.


๐Ÿ’ก ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

react-toastify

๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” alert์ฐฝ์ด ์•„๋‹ˆ๋ผ ์กฐ๊ธˆ ๋” ์ด์˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผ์ฐฝ!!

์„ค์น˜

yarn add react-toastify
// ๋˜๋Š” 
npm install --save react-toastify

์ ์šฉ

// import ํ•ด์ฃผ๊ธฐ
import { toast, ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";

// ์•Œ๋ฆผ์ฐฝ์„ ๋„์›Œ์ค„ ๋ถ€๋ถ„์— ์ ์šฉ
function App() {
  const notify = () => toast("๋‚ด์šฉ์„ ์ž์œ ๋กญ๊ฒŒ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");

  return (
    <>
      <button onClick={notify}>
        test
      </button>
    </>
  );
}


// ๋‚ด๊ฐ€ ์ ์šฉํ•œ ์˜ˆ์‹œ
if (!title) {
      toast("์ œ๋ชฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
      return;
    }
    if (!contents) {
      toast("๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
      return;
    }

// ์ ์šฉํ•ด์ฃผ๊ณ ์‹ถ์€ ๋ฒ„ํŠผ ๋‹ค์Œ์— ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•  ๋‚ด์šฉ
 <ToastContainer
        position="top-right" // ์•Œ๋žŒ ์œ„์น˜ ์ง€์ •
        autoClose={3000} // ์ž๋™ off ์‹œ๊ฐ„
        hideProgressBar={false} // ์ง„ํ–‰์‹œ๊ฐ„๋ฐ” ์ˆจ๊น€
        closeOnClick // ํด๋ฆญ์œผ๋กœ ์•Œ๋žŒ ๋‹ซ๊ธฐ
        rtl={false} // ์•Œ๋ฆผ ์ขŒ์šฐ ๋ฐ˜์ „
        pauseOnFocusLoss // ํ™”๋ฉด์„ ๋ฒ—์–ด๋‚˜๋ฉด ์•Œ๋žŒ ์ •์ง€
        draggable // ๋“œ๋ž˜๊ทธ ๊ฐ€๋Šฅ
        pauseOnHover // ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์•Œ๋žŒ ์ •์ง€
        theme="light"
        // limit={1} // ์•Œ๋žŒ ๊ฐœ์ˆ˜ ์ œํ•œ
      />

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ์ ์šฉ ๋!

๋œจ๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค! ๋‹ค์Œ์—๋Š” ์ปค์Šคํ…€ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.


โœ๐Ÿป ํšŒ๊ณ 

์ƒˆ๋กœ์šด๊ฒƒ์„ ๋ฐฐ์šฐ๋Š”๊ฑด ๋Š˜ ์–ด๋ ต๊ณ  ๋ง‰๋ง‰ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ์ง€๋‚œํ›„ ๋’ค๋Œ์•„ ๋ดค์„๋•Œ ์‹ ๊ธฐํ•˜๊ธฐ๋„ ํ•˜๋‹ค.
์–ผ๋ฅธ ๋” ๊ณต๋ถ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค. ๐Ÿ“š

profile
์›ฐ์”ฝํ‚น_๋‚˜๋Š” ๊ฒฝ์Ÿ๋ ฅ์„ ๊ฐ–์ถ˜ FE๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€