ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ToyProject-Todomate] ํˆฌ๋‘๋ฉ”์ดํŠธ ํด๋ก  ํ”„๋กœ์ ํŠธ 33
    WEB Dev/ToyProject 2022. 2. 1. 23:31
    728x90


    ๐Ÿ”ท CloneTodo โ˜‘ - Todomate Clone Project  |  Team CloneMate

     

    CloneTodo : ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํˆฌ๋‘๋ฉ”์ดํŠธ๋ฅผ ํด๋ก ํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ด๋ณด๋Š” ํ”„๋กœ์ ํŠธ

     


     

     

    ์—ฐํœด๊ฐ€ ๋ฒŒ์จ ๋ฐ˜์ด ์ง€๋‚˜๊ฐ”๋‹ค. ๋‚˜ํ˜๋ฐ–์— ์•ˆ๋˜๋Š” ์งง์€ ์—ฐํœด์ง€๋งŒ ์˜ค๋žœ๋งŒ์— ๊ธธ๊ฒŒ ์‰ฌ์–ด์„œ ์ข‹๊ธด ํ•˜๋‹ค.

    ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ํ›…ํ›… ์ž‘์„ฑํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์„ค์ค€๋น„ํ•˜๋ฉด์„œ ํ‹ˆํ‹ˆ์ด ํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์•˜๋‹ค ใ… ใ… ใ… ใ… 

     

    ์–ด์ œ๊นŒ์ง€๋Š” ์งฌ์งฌ์ด ๋ชฉํ‘œGoals ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „๋ฐ˜์ ์œผ๋กœ ์ˆ˜๋ฆฌํ–ˆ๋‹ค.

     

     

    - ์ €๋ฒˆ์ฃผ๊นŒ์ง€ ํ•œ ์ผ

    1. ๋ชฉํ‘œ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ธ ์ˆ˜์ •

     

     

    ๋ชฉํ‘œ Goals ์ปดํฌ๋„ŒํŠธ์˜ '๊ณต๊ฐœ ์„ค์ •' ๊ณผ '์ƒ‰์ƒ' ๋ถ€๋ถ„์˜ State๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

    ์ฒ˜์Œ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ตฌํ˜„ ์ž์ฒด์— ์‹ ๊ฒฝ์“ฐ๋Š๋ผ๊ณ  ๊น€๋‹ค์ •๋‹˜์˜ ์ฑ…์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ ๋ถ™์˜€๋Š”๋ฐ, ์ด๋ฒˆ์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ค ๋ณด๋‹ˆ ์ฝ”๋“œ ๊ธธ์ด๋„ ๋งŽ์ด ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  state๋„˜๊ธฐ๊ณ  ๋ฐ›๊ณ  ์ˆ˜์ •์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š” ๊ฑด ์ง€ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋ชฉํ‘œ ๋ฆฌ์ŠคํŠธ์—์„œ +๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ชฉํ‘œ ์ถ”๊ฐ€ ํŽ˜์ด์ง€๊ฐ€, ๋ชฉํ‘œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ชฉํ‘œ ์ˆ˜์ • ํŽ˜์ด์ง€๊ฐ€ ๋œฐ ์ˆ˜ ์žˆ๋„๋ก Router๋„ ์ˆ˜์ •ํ–ˆ๋‹ค.

     

    <Route exact path="/goals">
    <BasicNavBar/>
      <Goals  />
    </Route>
    <Route exact path="/goalForm">
     <BasicNavBar/> 
     <GoalForm />  
    </Route>
    <Route exact path="/goalEditForm/:originID">
    <BasicNavBar/> 
     <GoalEditForm />  
    </Route>

     

    ๊ทธ๋ฆฌ๊ณ  ๋ชฉํ‘œ ์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ๋Š” : ๋ฅผ ์‚ฌ์šฉํ•ด์„œ url์˜ get ๋ฐฉ์‹์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ฒจ์„œ ํ•ด๋‹น id์˜ state๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ˆ˜์ •๋˜๋„๋ก ํ–ˆ๋‹ค.

     

     

    ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์˜ state๋„ ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๋˜๋„๋ก ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

    ์—ฌ๊ธฐ์„œ ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ์ €๋ฒˆ์ฃผ๋Š” ์ „๋ถ€ ์—ฌ๊ธฐ์— ํˆฌ์žํ•œ ๊ฑฐ ๊ฐ™๋‹ค. ์ข€ ๋” ์ •์‹ ์ด ์žˆ์—ˆ์œผ๋ฉด ์ƒ์„ธํ•˜๊ฒŒ ๊ธฐ๋กํ–ˆ์„ํ…๋ฐ...

    state ์ •๋ณด ์ค‘์—์„œ bg_color ๋„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ ํ˜„์žฌ ํˆฌ๋‘๋ฉ”์ดํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋ฐ”๋žŒ์— bg_color ๊ธฐ๋Šฅ์ด ์‚ฌ๋ผ์กŒ๋‹ค! ๊ทธ๋ž˜์„œ title_color ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๋˜์ง€ ํ•ด์•ผ๊ฒ ๋‹ค.

     

     

     

     

     

     

    2. Dialog ์ ์šฉ

     

    ์ ์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์€ ๋ชจ๋‘ MUI์˜ Dialog ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‹ฌ์ฒ˜๋Ÿผ ๋„์›Œ์ง€๋„๋ก ํ–ˆ๋‹ค.

    Dialog ๋ฅผ ์ ์šฉํ•˜์ง€ ์กฐ๊ธˆ ๋” ์ž์—ฐ์Šค๋Ÿฌ์šด UI๊ฐ€ ๋˜์—ˆ๋‹ค.

    SCSS๋กœ CSS๋„ ์ˆ˜์ •ํ–ˆ๊ณ  ์ƒ‰์ƒ ์„ ํƒ ์‹œ ์˜ˆ์‹œ ์ƒ‰์ƒ์ด ๋ณด์ผ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๊ณ , radio ๋ฒ„ํŠผ์œผ๋กœ ๊ตฌํ˜„ํ•œ input๋“ค์ด ๋ณ€ํ•  ๋•Œ ๋งˆ๋‹ค state๋„ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

     

     

     

     

     

    3. Recoil์„ ์ ์šฉ

     

    Recoil์„ ์„ค์น˜ํ•˜๊ณ , atoms๋ผ๋Š” ํด๋”์— todoData๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ state ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

    state๋“ค์€ atom์œผ๋กœ ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋ฟŒ๋ ค์ง€๊ณ  ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋กœ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ default์— ์ž‘์„ฑํ–ˆ๋‹ค.

     

     

    import { atom } from "recoil";
    
    export const textState = atom({
      key: 'textState', // unique ID (with respect to other atoms/selectors)
      default: '', // default value (aka initial value)
    });
    
    
    export const calendarData = atom({
        key: 'calendarData', // unique ID (with respect to other atoms/selectors)
        default:  [ 
          { numTodoDay: 8, numCountTodo: 2, completeYn: 'n' }, 
          { numTodoDay: 13, numCountTodo: 4, completeYn: 'n', }, 
          { numTodoDay: 29, numCountTodo: 6, completeYn: 'y' } ] // default value (aka initial value)
      });
    
    
    export const goalsData = atom({ 
      key: "goalsData",
      default: [
        {
          "goal_id": 0,
          "next_goal_id": 1,
          "title": "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ",
          "privacy": "PUBLIC",
          "bg_color": "",
          "title_color": "#3CB371"
        },
        {
          "goal_id": 1,
          "next_goal_id": 2,
          "title": "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ",
          "privacy": "PRIVATE",
          "bg_color": "",
          "title_color": "#C71585"
        }
      ]
    })
    
    export const goalReadOnly = atom({
      key: "goalReadOnly",
      default: "read"
    })

     

    Recoil์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— App.js ๋กœ ์ „๋ถ€ ์˜ฌ๋ ค๋ณด๋ƒˆ๋˜ ํ•จ์ˆ˜๋“ค๋„ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋ถ€ ์˜ฎ๊ฒผ๋‹ค. 

    ๋ชฉํ‘œ ์ปดํฌ๋„ŒํŠธ์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ App.js ์— ์žˆ๋˜ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ํ•จ์ˆ˜๋“ค์„ ํ•œ ๋ฒˆ ์ˆ˜์ •ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ํ•จ์ˆ˜๋ฅผ ํ•˜์œ„๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ๋˜ ์ˆ˜์ •์„ ๋ฐ˜๋ณตํ•ด์•ผํ–ˆ๋‹ค.

     

    ์—ญ์‹œ ํ•œ๋ฐฉ์— ํ•˜๋Š”๊ฒŒ ์ตœ๊ณ ๋‹ค.

     

     

     

    ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ Feed ํ™”๋ฉด์— atom์œผ๋กœ ๋ชฉํ‘œ๋ฅผ ๋ฟŒ๋ ค์ฃผ๋Š” ํ™”๋ฉด์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๊ณ 

    ๋‚ด์ผ์€ ๋ชฉํ‘œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํˆฌ๋‘๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋ณด์ž.

     

     

     

     

    728x90

    ๋Œ“๊ธ€

Designed by Tistory.