<๊ฐ์>
์ฑ์ ๋์๋ค๊ฐ ๋ค์ ๋ค์ด๊ฐ๋ ๋ด๊ฐ ์ผ์ ์ ์ ์๋ todoList๋ ๊ทธ๋๋ก ์ ์ฅ๋์ด ์์ด์ผ ํ๋ค.
๊ทธ๊ฑธ ๊ตฌํํ๊ธฐ ์ํด Stroage๋ DB๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ด ๋๋๋ง ๋๊ณ ์๋ ์ํฉ์์ update ์ ๋ฐ๋ก DB์ update ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ์์ผ ์ฃผ๋๋กํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ์ด ๋ค์ ์์๋ ๋, ํด๋น DB์์ ๋ด์ฉ๋ฌผ์ ๊บผ๋ด ์ค๋๋ก ํ๋ค.
1. ๋ก์ง
2. ์ฝ๋ ๋ฆฌ๋ทฐ
AsyncStorage - Expo Documentation
๋จผ์ ์ฌ๊ธฐ์ AsyncStorage ๊น๊ธฐ.
์ ๋๋ก ๊ตฌ๋๋๋ ค๋ฉด, ์ค์นํ๊ณ VS code ๊ป๋ค๊ฐ ์ผ์ผํจ.
๋จผ์ ์ ์ญ๋ณ์๋ก TODO_LIST_KEY๋ผ๋ ๊ฒ์ ๋ง๋ค์๋๋ฐ, ์ด๋ addTodo, removeTodo, toggleTodo ๋ชจ๋ ๊ฐ์ Key์ผ๋ก Value๋ฅผ ์ ์ฅํ๊ฒ ํ๊ธฐ ์ํจ์ด๋ค.
๋ ๋ฒ์งธ ๋ฐ์ค์ Code๋ AsyncStorage ๋ด์ฅํจ์๋ก .setItem("KEY", "VALUE") ํํ๋ก ์ ์ฅ๋๋ค.(Spring MVC์์ ๋ชจ๋ธ์ด ํญ์ HashMap ํํ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.) DB์์ ๋ชจ๋ Value๋ String ํํ๋ก๋ง ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ todoList ์์ฒด๋ฅผ ํต์งธ๋ก String์ผ๋ก ํ๋ณํ ์์ผ์ค์ผ ํ๋ค.
JSON.stringfy()๋ ()์์ ๋ด์ฉ๋ฌผ์ String์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ ๋ฒ์งธ๋ฅผ ๋ณด๋ฉด addTodo ์์ ์ด ๋๋ ํ์ ์ฐ๋ฆฌ๊ฐ ์ฐ๊ณ ์๋ ์ฝ๋ ๋ด List ์์ฒด๋ ์ต์ ํ ํด์ฃผ๊ณ ์๊ณ , Storage์๋ ๊ฐ์ ์ ์ฅ ์์ผ ์ต์ ํ ์์ผ์ฃผ๊ณ ์๋ค.
๋งจ ์์ useEffect๋ []์์ด ๋น์ด์๋ค. ์๋ useEffect๋ [ ] ์์ ๋ด์ฉ์ด ๋ณ๊ฒฝ ๋์์ ๋, ์ฒซ ๋ฒ์งธ ์ธ์์ callback ํจ์๊ฐ ์คํ๋๋ ํํ์ด๋ค.
[ ]์์ด ๋น์ด์์ผ๋ฉด ํ๋ก๊ทธ๋จ ๋๋๋ง ์์ ์ ์ฒ์์ด์ ๋ง์ง๋ง์ผ๋ก ์ฒซ ๋ฒ์งธ ์ธ์์ ํจ์๋ฅผ ์คํํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
์ด๋ java Servlet์์ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ญํ ์ ํ๋ค. (๋ณธ ํ๋ก๊ทธ๋จ ์์ ์ ์ ํ๋ ์ผ ์ฒ๋ฆฌ๋ฅผ ์ ์ฒ๋ฆฌ๋ผ ํ๊ณ , ๋ณดํต ํ๋ก๊ทธ๋จ์ ์ฐ์ด๋ ๋ด์ฉ์ ์ค๋นํ๋ ์์ ์ ํ๋ค.)
init ํจ์๋ ์ด๊ธฐํ ํจ์๋ก async ํจ์๋ฅผ ์ด์ฉํ๋ค.
๋จผ์ result๋ผ๋ ๋ณ์๋ฅผ ์ด๊ธฐํ ํด์ฃผ์๋ค. ์ด๋ getItem์ ํตํด TODO_LIST_KEY๋ Key ๊ฐ์ ํด๋นํ๋ value์ธ todoList๋ฅผ ๊ฐ์ ธ์ result์ ๋์ ์์ผ์ฃผ์๋ค.
ํ์ง๋ง result ์์ฒด๋ฅผ ๋ฐ๋ก setTodoList์ ์ธ์๋ก ๋ฃ์ด์ค ์ ์๋ค.
์๋ํ๋ฉด, setTodoList์ ๋ค์ด๊ฐ์ผ ํ๋ ๋ด์ฉ์ ๊ฐ์ฒด์ฌ์ผ ํ๋๋ฐ result๋ String์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ JSON.parse๋ก ๋ค์ ํ๋ฒ result๋ฅผ object ํ์ ์ผ๋ก ํ๋ณํ ์์ผ์ฃผ์ด์ setTodoList์ ๋ฃ๋๋ค.
console.log๋ result์ newTodoList ์ ํ์ , ๋ด์ฉ๋ค์ ์ฝ์์ ์ฐ์ด๋ณด๊ธฐ ์ํด ์ฐ์ธ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
3. ์๋กญ๊ฒ ๋ฐฐ์ด ๊ฒ - JSON
(1) JSON์ด๋?
Java Script Object Notation์ ์ฝ์๋ก ์๋ฐ ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
JSON์ ํ ์คํธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๊ตํ ํ์ค์ผ๋ก์ ๊ฐ์ฒด ๋ฐ์ดํฐ์ ๊ตํ๊ณผ ์ ์ฅ์ ๋ง์ด ์ฌ์ฉ๋๋ค.
JSON์ ํ ์คํธ ๊ธฐ๋ฐ์ด๋ผ ์ฌ๋ฌ ๋ค์ํ ์ธ์ด์์๋ JSON์ ์ฝ๊ณ ์ฌ์ฉํ ์ ์๋ค.
(2) JSON์ ํํ
a. ๊ธฐ๋ณธํ
JSON์ ํํ๋ JS ๋ด์ ๊ฐ์ฒด์ ํํ์ ๊ฐ๋ค.
{key : value}
b. ์ฌํํ
value์๋ ๋ชจ๋ ํ์ ์ ๊ฐ๋ค์ด ์ฌ ์ ์๋ค.
// value๋ก ์ฌ ์ ์๋ ๊ฐ
// 1. ์ซ์(num)
{k : 1}
// 2. ๋ฌธ์์ด
{k : "str"}
// 3. boolean
{k : true}
// 4. object
{k : {inKey : "value", inkey2 : "value2"}}
// 5. array
{k : [apple, banna, orange]}
// 6. null
{k : null}
value์ธ array ์ ๊ฐ๋ค์ด ๋ค object ์ผ์๋ ์๋ค.
{"TODO_LIST_KEY" :
[
{
id: 1,
content: "์ด๋ํ๊ธฐ",
date: dayjs()
isSuccess: true
},
{
id: 2,
content: "๋ฐฅ๋จน๊ธฐ",
date: dayjs()
isSuccess: false
},
{
id: 3,
content: "๊ณต๋ถํ๊ธฐ",
date: dayjs()
isSuccess: true
},
]
}
(3) JSON ๋ด์ฅ ํจ์
a. JSON.stringify( )
()์์ JSON ํํ์ ๋ด์ฉ๋ฌผ์ String์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
const JSON = {Key : Value}
const typeCasting = JSON.stringify(JSON)
// JSON์ ๋ด์ฉ์ด ํต์งธ๋ก String์ผ๋ก ๋ณํจ -> ๋ด์ฉ๋ฌผ๋ถํฐ ๊ฒ๊น์ง ๋ชจ๋ ๋ถ๋ถ์ด String ํ ๋๋ค.
// ์์ outPut : "{"key", "value"}"
b. JSON.parse()
String์ผ๋ก ๋ฐ๋์๋ JSON ํํ์ ๋ด์ฉ๋ฌผ์ ๋ค์ Object type์ผ๋ก ํ ๋ณํ ์์ผ์ค๋ค.
const JSON2 = "{"key" : "Value"}"
const typeCasting2 = JSON.parse(JSON2)
// ๋ค์ ๋งจ ๊ฐ์ ๋ถ์ด์๋ ""๊ฐ ์ญ์ ๋จ.
์ด๋ JSON.parse( )์์ ๋ค์ด๊ฐ๋ String์ ๋ด์ฉ๋ฌผ์ด JSON ๋ฌธ์์ด์ ํํ๋ฅผ ๋์ด์ผ ํ๋ค.
JSON ๋ฌธ์์ด์ด๋ ์์ JSON.stringify()์ ๋ฃ์์ ๋ ์ฒ๋ผ, ๊ฒ ํ์ง, key, value๊ฐ ๋ชจ๋ String์ผ๋ก ๋ฐ๋ ์ํ๋ฅผ ๋งํ๋ค.
๋ค์๊ณผ ๊ฐ์ String ๋ณ์๋ฅผ JSON.parse ์์ ๋ฃ์ด์ฃผ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
const JSON3 = "๊ทธ๋ฅ string ์
๋๋ค."
JSON.parse(JSON3)
// ์๋ฌ๊ฐ ๋จ