[ToyProject-Todomate] ํˆฌ๋‘๋ฉ”์ดํŠธ ํด๋ก  ํ”„๋กœ์ ํŠธ 38

2022. 3. 21. 23:25ใ†WEB Dev/ToyProject

728x90


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

 

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

 


 

์™€์šฐ ์—„์ฒญ ์˜ค๋žœ๋งŒ์— ํ† ์ดํ”„๋กœ์ ํŠธ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ด๋ณธ๋‹ค. 

๊ทธ๋™์•ˆ ์ž‘์—…์„ ์•ˆํ•œ ๊ฑด ์•„๋‹ˆ๊ณ  ๊ธ€์„ ์ ๋Š” ์‹œ๊ฐ„์— ๋นจ๋ฆฌ ๊ฐœ๋ฐœ์„ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— ๊ธ€์„ ์ข€ ์ž์ œํ–ˆ๋‹ค.

 

 

๊ทธ๋™์•ˆ ํ•œ ์ผ์€

 

 

 

1. ํˆฌ๋‘๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋„์›Œ์ง€๋Š” ๋ชจ๋‹ฌ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ - ์ˆ˜์ •, ๋‚ด์ผํ•˜๊ธฐ, ๋‚ ์งœ๋ฐ”๊พธ๊ธฐ, ์ˆœ์„œ๋ณ€๊ฒฝ, ์‚ญ์ œ

   ์ˆ˜์ •, ๋‚ด์ผํ•˜๊ธฐ, ๋‚ ์งœ ๋ฐ”๊พธ๊ธฐ, ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

   ๊ทธ๋ฆฌ๊ณ  ์ˆœ์„œ ๋ณ€๊ฒฝ์„ ๋ณ„๋„ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ด์„œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•ด์•ผํ•˜๋Š”๋ฐ

   ์ด ๋กœ์ง์ด ์กฐ๊ธˆ ๋ณต์žกํ•ด์„œ ๋ฐฑ์—”๋“œ ํŒ€์›๋ถ„๊ณผ ๋‚˜์ค‘์— ๊ฐ™์ด ์ž‘์—…ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

   ๋“œ๋ž˜๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋Œ€์ถฉ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋Š” ํ–ˆ๋Š”๋ฐ ์ง„์ „์ด ๋งŽ์ด ์•ˆ๋˜์—ˆ๋‹ค.

   ๋‚ด์ผ ํ•˜๊ธฐ์™€ ๋‚ ์งœ๋ฐ”๊พธ๊ธฐ๋ฅผ ํด๋ฆญํ•œ ๊ฒฝ์šฐ datepicker๋ฅผ ์จ์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๊ณ , ํ™•์ธ์„ ๋ˆ„๋ฅด๋ฉด state๊ฐ€ ๋ฐ”๋€Œ๋„๋ก ํ•˜์˜€๋‹ค.

 

 

 

 

 

2. ๊ฐ„ํŽธ ์ž…๋ ฅ ๊ตฌํ˜„

    ๊ฐ„ํŽธ ์ž…๋ ฅ์ด๋ผ๋Š” UI๋ช…์ด ์™€๋‹ฟ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•„ ๋‚ด ์‹์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค. 

    ๊ธฐํ•œ์ด ์žˆ๋Š” ํ•  ์ผ ์„ค์ •์ด๋ผ๋Š” UI๋ช…์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๋ชฉํ‘œ๋ฅผ ๋ฟŒ๋ ค์ค€ ๋‹ค์Œ ๋ชฉํ‘œ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜ ์–‘์‹์ด ์ƒ์„ฑ๋˜๊ณ 

    ์ƒ์„ฑ๋œ ์–‘์‹์— ๋ฐ˜๋ณตํ•  ์ผ์ •๊ณผ ์š”์ผ์„ ์„ค์ •ํ•œ ๋‹ค์Œ ํ™•์ธ์„ ํด๋ฆญํ•˜๋ฉด state์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

    ์บ˜๋ฆฐ๋”๊ฐ€ ๊ฐ๊ฐ ์‹œ์ž‘ ๋‚ ์งœ์™€ ์ข…๋ฃŒ ๋‚ ์งœ์— ๊ฐ’์„ ์ „๋‹ฌํ•ด์•ผ ํ•ด์„œ ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ

    ํ•˜๋‚˜์˜ ์บ˜๋ฆฐ๋” ๋ชจ๋‹ฌ์„ ์ด์šฉํ•ด์„œ ๊ฐ input ๊ฐ’์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์•˜์„ ๊ฑฐ ๊ฐ™๋‹ค.

    ๋‚˜์ค‘์— ์ด ๋ถ€๋ถ„์„ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค.

 

 

 

 

 

 

 

3. CSS ๋œฏ์–ด๊ณ ์น˜๊ธฐ

 

 

    ์ดˆ๋ฐ˜์— CSS๋ฅผ ๋•์ง€๋•์ง€ ๋ฐœ๋ผ๋†”์„œ sx={{}} ์†์„ฑ์œผ๋กœ ๋งŽ์ด ๋ถ™์—ฌ๋†จ๋‹ค. ์ด ๋ถ€๋ถ„์„ ๋‹ค ๋–ผ์„œ SCSS๋กœ CSS๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ณ 

    ๋ณ€์ˆ˜๋ž‘ ๋ฏน์Šค์ธ๋„ ํ™œ์šฉ์„ ํ–ˆ๋‹ค.

    ๊ฐ™์€ ๋””์ž์ธ์ด ์—ฌ๋Ÿฌ๊ตฐ๋ฐ ๋“ค์–ด๊ฐ€๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฏน์Šค์ธ์„ ์“ฐ๋‹ˆ ์˜คํžˆ๋ ค ๋” ๋ณด์ˆ˜๊ฐ€ ๋ถˆํŽธํ•œ ๋Š๋‚Œ์ด ์žˆ์—ˆ๋Š”๋ฐ

    ํ†ต์‹  ์—ฐ๊ฒฐ๊นŒ์ง€ ๋๋‚˜๋ฉด CSS๋ฅผ ์ตœ์ข… ์ˆ˜์ •ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

 

4. ๊ธฐ์กด์˜ ๋ชฉํ‘œ ๋”ฐ๋กœ ํˆฌ๋‘ ๋”ฐ๋กœ API Result ํ†ตํ•ฉ

 

 

๊ธฐ์กด์— ์•„๋ž˜์™€ ๊ฐ™์ด goal ๋ฐ์ดํ„ฐ์™€ todo ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ์ผ์—ˆ๋Š”๋ฐ

 

//๋ชฉํ‘œ ๋ฐ์ดํ„ฐ

export const goalsData = atom({ // ๋กœ๋”ฉ ์‹œ ๋ชจ๋“  ๋ชฉํ‘œ ๋ฟŒ๋ฆฌ๊ธฐ
  key: "goalsData",
  default: [
    {
      "goal_id": 0,
      "next_goal_id": 1,
      "title": "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ",
      "privacy": "PUB",
      "box_color": "",
      "title_color": "#3CB371"
    },
    {
      "goal_id": 1,
      "next_goal_id": 2,
      "title": "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ",
      "privacy": "PRI",
      "box_color": "",
      "title_color": "#234d22"
    },
    {
      "goal_id": 2,
      "next_goal_id": 3,
      "title": "์„ธ ๋ฒˆ์งธ ๋ชฉํ‘œ",
      "privacy": "PRI",
      "box_color": "",
      "title_color": "#C71585"
    },
    {
      "goal_id": 3,
      "next_goal_id": 4,
      "title": "๋„ค ๋ฒˆ์งธ ๋ชฉํ‘œ",
      "privacy": "PRI",
      "box_color": "",
      "title_color": "#21bdbd"
    }
  ]
})

export const goalReadOnly = atom({
  key: "goalReadOnly",
  default: "read"
})

export const createRepeatDay = atom({
  key: "createRepeatDay",
  default: {
  "sun": "N", //y ๋ฉด ์ผ์š”์ผ ๋ฐ˜๋ณต, n ์ด๋ฉด ๋ฐ˜๋ณต x
  "mon": "N",
  "tue": "N",
  "wed": "N",
  "thu": "N",
  "fri": "N",
  "sat": "N",
}
});

 

 

//ํˆฌ๋‘ ๋ฐ์ดํ„ฐ

export const todoData = atom({ // ๋กœ๋”ฉ ์‹œ ์˜ค๋Š˜ ๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ // ์บ˜๋ฆฐ๋”์—์„œ ๋‚ ์งœ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ๋กœ ๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ // ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋Š” 2022-02-05
  key: "todoData",
  default: [
    {
    "todo_id": 0,
    "goal_id": 0, //๋ฌถ์—ฌ์žˆ๋Š” goal id
    "next_todo_id": 1, //๋‹ค์Œ todo id (์ˆœ์„œ์ง€์ •์šฉ)
    "title": "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ํ•  ์ผ 0",
    "date": "2022-02-05",
    "end_repeat_date": "2022-02-05", //๋ฐ˜๋ณต ์ข…๋ฃŒ ์ผ์ž. ๋ฐ˜๋ณต ์—†์œผ๋ฉด date ์™€ ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ ์—†์Œ
    "repeat_days": {
        "sun": "N", //y ๋ฉด ์ผ์š”์ผ ๋ฐ˜๋ณต, n ์ด๋ฉด ๋ฐ˜๋ณต x
        "mon": "N",
        "tue": "N",
        "wed": "N",
        "thu": "N",
        "fri": "N",
        "sat": "N",
    },
    "check_yn" : "N" //๋‹ฌ์„ฑ์—ฌ๋ถ€
  },
  {
    "todo_id": 1,
    "goal_id": 0, //๋ฌถ์—ฌ์žˆ๋Š” goal id
    "next_todo_id": 2, //๋‹ค์Œ todo id (์ˆœ์„œ์ง€์ •์šฉ)
    "title": "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ํ•  ์ผ 1",
    "date": "2022-02-05",
    "end_repeat_date": "2022-02-05", //๋ฐ˜๋ณต ์ข…๋ฃŒ ์ผ์ž. ๋ฐ˜๋ณต ์—†์œผ๋ฉด date ์™€ ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ ์—†์Œ
    "repeat_days": {
        "sun": "N", //y ๋ฉด ์ผ์š”์ผ ๋ฐ˜๋ณต, n ์ด๋ฉด ๋ฐ˜๋ณต x
        "mon": "N",
        "tue": "N",
        "wed": "N",
        "thu": "N",
        "fri": "N",
        "sat": "N",
    },
    "check_yn" : "N" //๋‹ฌ์„ฑ์—ฌ๋ถ€
  },
  {
    "todo_id": 0,
    "goal_id": 1, //๋ฌถ์—ฌ์žˆ๋Š” goal id
    "next_todo_id": 1, //๋‹ค์Œ todo id (์ˆœ์„œ์ง€์ •์šฉ)
    "title": "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ํ•  ์ผ 1",
    "date": "2022-02-05",
    "end_repeat_date": "2022-02-05", //๋ฐ˜๋ณต ์ข…๋ฃŒ ์ผ์ž. ๋ฐ˜๋ณต ์—†์œผ๋ฉด date ์™€ ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ ์—†์Œ
    "repeat_days": {
        "sun": "N", //y ๋ฉด ์ผ์š”์ผ ๋ฐ˜๋ณต, n ์ด๋ฉด ๋ฐ˜๋ณต x
        "mon": "N",
        "tue": "N",
        "wed": "N",
        "thu": "N",
        "fri": "N",
        "sat": "N",
    },
    "check_yn" : "N" //๋‹ฌ์„ฑ์—ฌ๋ถ€
  }
]
})

 

 

 

์ด๊ฒƒ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์œผ๋ฉด์„œ ๋ฐฐ์—ด ์•ˆ์— ๊ฐ์ฒด, ๊ฐ์ฒด ์•ˆ์— ๋ฐฐ์—ด ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์„œ ํ™”๋ฉด ๋ณ€ํ™” ๋ Œ๋”๋ง ๋กœ์ง์„ ์ „๋ฉด ๊ต์ฒดํ–ˆ๋‹ค.

๊ธฐ์กด ๋ชฉํ‘œ / ํˆฌ๋‘ ๋ฅผ ๋ชฉํ‘œ+ํˆฌ๋‘๋กœ ๋ฐ”๊พผ ๊ฒƒ.

 

 

 

// todo api
export const objTodosDataResult = atom({
  key: 'objTodosDataResult',
  default: [
  {
  goalTitle : "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ",
  goalId: 1,
  goalOrderNo : 1,
  goalTitleColor : "#ff0000",
  todos : [
       {goalId: 1,
        todoId: 1,
        orderNo: 1,
        title: "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ์ฒซ ๋ฒˆ์งธ ํ•  ์ผ",
        date: "2022-02-13",
        endRepeatDate: "2022-02-13",
        repeatDays: {
          THU: "N",
          WEN: "N",
          TUE: "N",
          SAT: "N",
          FRI: "N",
          MON: "N",
          SUN: "N"
        },
        checkYn: "N"
        },
        {goalId: 1,
          todoId: 2,
          orderNo: 2,
          title: "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ๋‘ ๋ฒˆ์งธ ํ•  ์ผ",
          date: "2022-02-13",
          endRepeatDate: "2022-02-14",
          repeatDays: {
            THU: "N",
            WEN: "N",
            TUE: "N",
            SAT: "N",
            FRI: "N",
            MON: "N",
            SUN: "N"
          },
          checkYn: "N"
      },
      {goalId: 1,
        todoId: 3,
        orderNo: 3,
        title: "์ฒซ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ์„ธ ๋ฒˆ์งธ ํ•  ์ผ",
        date: "2022-02-13",
        endRepeatDate: "2022-02-17",
        repeatDays: {
          THU: "N",
          WEN: "Y",
          TUE: "N",
          SAT: "N",
          FRI: "Y",
          MON: "N",
          SUN: "N"
        },
        checkYn: "N"
      },
  ]},
  {
    goalTitle : "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ",
    goalId: 2,
    goalOrderNo : 2,
    goalTitleColor : "#ff873d",
    todos : [
         {goalId: 2,
          todoId: 1,
          orderNo: 1,
          title: "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ์ฒซ ๋ฒˆ์งธ ํ•  ์ผ",
          date: "2022-02-13",
          endRepeatDate: "2022-02-13",
          repeatDays: {
            THU: "N",
            WEN: "N",
            TUE: "N",
            SAT: "N",
            FRI: "N",
            MON: "N",
            SUN: "N"
          },
          checkYn: "N"
          },
          {goalId: 2,
            todoId: 2,
            orderNo: 2,
            title: "๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ๋‘ ๋ฒˆ์งธ ํ•  ์ผ",
            date: "2022-02-11",
            endRepeatDate: "2022-02-15",
            repeatDays: {
              THU: "N",
              WEN: "N",
              TUE: "N",
              SAT: "N",
              FRI: "N",
              MON: "N",
              SUN: "N"
            },
            checkYn: "N"
        },
    ]},
    {
      goalTitle : "์„ธ ๋ฒˆ์งธ ๋ชฉํ‘œ",
      goalId: 3,
      goalOrderNo : 3,
      goalTitleColor : "#0119cb",
      todos : [
           {goalId: 3,
            todoId: 1,
            orderNo: 1,
            title: "์„ธ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ์ฒซ ๋ฒˆ์งธ ํ•  ์ผ",
            date: "2022-02-16",
            endRepeatDate: "2022-02-16",
            repeatDays: {
              THU: "N",
              WEN: "N",
              TUE: "N",
              SAT: "N",
              FRI: "N",
              MON: "N",
              SUN: "N"
            },
            checkYn: "N"
            },
            {goalId: 3,
              todoId: 2,
              orderNo: 2,
              title: "์„ธ ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ๋‘ ๋ฒˆ์งธ ํ•  ์ผ",
              date: "2022-02-13",
              endRepeatDate: "2022-02-19",
              repeatDays: {
                THU: "N",
                WEN: "N",
                TUE: "N",
                SAT: "N",
                FRI: "N",
                MON: "N",
                SUN: "N"
              },
              checkYn: "N"
          },
      ]},
      {
        goalTitle : "๋„ค ๋ฒˆ์งธ ๋ชฉํ‘œ",
        goalId: 4,
        goalOrderNo : 4,
        goalTitleColor : "#77ab59",
        todos : [
             {goalId: 4,
              todoId: 1,
              orderNo: 1,
              title: "๋„ค ๋ฒˆ์งธ ๋ชฉํ‘œ์˜ ์ฒซ ๋ฒˆ์งธ ํ•  ์ผ",
              date: "2022-02-16",
              endRepeatDate: "2022-02-16",
              repeatDays: {
                THU: "N",
                WEN: "N",
                TUE: "N",
                SAT: "N",
                FRI: "N",
                MON: "N",
                SUN: "N"
              },
              checkYn: "N"
              },
        ]},
]
})

 

 

5. ํ˜„์žฌ ๋‚ ์งœ์˜ ๋ชจ๋“  ํ•  ์ผ ์ˆ˜์ •

 

   Feed์—์„œ ํ•˜๋‹จ์˜ ... ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ์˜ค๋Š˜์˜ ํ•  ์ผ๋“ค์„ ํ•œ ๋ฒˆ์— ๋‹ค๋ฃจ๋Š” ๋ฉ”๋‰ด๊ฐ€ ์žˆ๋Š”๋ฐ ์›๋ž˜ ์ด๋ฆ„์€ ๋‚ ์งœ๋ณ„ ํ•  ์ผ ์ˆ˜์ •์ด์—ˆ๋‹ค. ์ด๊ฒƒ๋„ ๊ฐ„ํŽธ ์ž…๋ ฅ์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ๋ฐ”๊พธ์—ˆ๋‹ค. ๋‚ ์งœ๋ณ„ ํ•  ์ผ ์ˆ˜์ •์œผ๋กœ.

   ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ๋ชจ๋‹ฌ์ฒ˜๋Ÿผ ์•„์ด์ฝ˜์„ ๋„ฃ์€ UI๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค. ํ™”๋ฉด ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ...

 

์›๋ณธ

 

๋ณ€๊ฒฝ

 

 

 

6. Calendar ๋ˆŒ๋ €์„ ๋•Œ ๋‚ ์งœ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก date ์ •๋ณด ๊ฐœ์„ 

 

 

๊ฐ ์บ˜๋ฆฐ๋” ๋ชจ๋‹ฌ์—์„œ ๊ฐ๊ฐ ๊ด€๋ฆฌ๋˜๋˜ date๋ฅผ Recoil์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก date ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

 

const today = new Date();
const tomorrow = new Date(today);
const nextDay = new Date(tomorrow.setDate(today.getDate()+1))


//์˜ค๋Š˜ ๋‚ ์งœ, ๋‚ด์ผ ๋‚ ์งœ
export const objDatesData = atom({
  key: 'objDatesData',
  default : {
    "dtToday" : today.toJSON().substring(0, 10),
    "dtTomorrow" : nextDay.toJSON().substring(0, 10),
    "dtFeedCalendarDate" : today,
    "selectedNewDate" : new Date(),
    "selectedNewEndDate" : new Date(),
  }

})

 

 

 

 

7. ๋ถˆํ•„์š”ํ•œ recoil state ์‚ญ์ œ

 

 

์กฑ์ œ๋น„๋‹˜๊ณผ ๋Œ€ํ™” ์ค‘์— ๋ถˆํ•„์š”ํ•˜๊ฒŒ recoil state๊ฐ€ ๋‚œ๋ฌดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๊ณ  

ํŒŒ์ผ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์ง€๋Š” ์ปดํฌ๋„ŒํŠธ ์ตœ์†Œ 2๊ฐœ ์ด์ƒ์—์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด atom์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋‚ ์งœ ์ •๋ณด๋Š” main์—์„œ ํด๋ฆญํ•˜๋Š” ์บ˜๋ฆฐ๋” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‚ ์งœ ๋ณ€๊ฒฝ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์บ˜๋ฆฐ๋” ์ปดํฌ๋„ŒํŠธ๋กœ state ์ˆ˜์ •์„ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— recoil๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

todo๋‚˜ goal์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ ...

๋‚˜๋จธ์ง€ ์ž์ž˜ํ•œ readonly ์†์„ฑ์ด๋‚˜ true false๋งŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„(๋ชจ๋‹ฌ์ฐฝ on/off ๊ฐ™์€)์„ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‹ค์‹œ ์˜ฎ๊ฒจ ๋„ฃ์—ˆ๋‹ค.

 

 

 

์ด๋ฒˆ์ฃผ ํ•  ์ผ์€

fetch ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋ชจ๋“ˆ์„ ์ญ‰ ๋งŒ๋“ค์–ด๋†“๊ณ  ๊ฐ ์‹คํ–‰ ํ•จ์ˆ˜์— import ์‹œํ‚ค๊ณ 

๋ฉ”๋‰ด ์™„์„ฑํ•ด์„œ ๋ผ์šฐํŠธ๋„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ธ๋ฐ

ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€ ์šฐํ•˜ํ•˜

 

 

728x90