diff --git a/05-hooks/src/App.css b/05-hooks/src/App.css
index 74b5e053..792cfd10 100644
--- a/05-hooks/src/App.css
+++ b/05-hooks/src/App.css
@@ -17,7 +17,7 @@
background-color: #282c34;
min-height: 100vh;
display: flex;
- flex-direction: column;
+ flex-direction: row;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
diff --git a/05-hooks/src/App.js b/05-hooks/src/App.js
index ed337b0b..69e0c894 100644
--- a/05-hooks/src/App.js
+++ b/05-hooks/src/App.js
@@ -2,31 +2,98 @@ import React, { useReducer, useRef } from "react";
import logo from "./logo.svg";
import "./App.css";
+import { useImmer } from "use-immer";
+
+const CharList = () => {
+ const [state, updateState] = useImmer({
+ char: [
+ {
+ id: 1,
+ name: "Yutsuo",
+ class: { id: "1", label: "monk" },
+ level: { clvl: "120", jlvl: "70" }
+ },
+ {
+ id: 2,
+ name: "Hee-Tae",
+ class: { id: "2", label: "monk" },
+ level: { clvl: "80", jlvl: "55" }
+ }
+ ]
+ });
+
+ const jobLevelUp = event => {
+ // updateState(draft => {
+ // draft.char[0].level.jlvl++;
+ // });
+ console.log("event.target.id :", event.target);
+ console.log('state.char :', state.char);
+ console.log('state.char[0] :', state.char[0]);
+ };
+
+ return state.char.map(eachItem => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+ });
+};
+
const Counter = () => {
const [sum, dispatch] = useReducer((state, action) => {
return state + action;
}, 0);
return (
- <>
- {sum}
-
- >
+
+
{sum}
+
+
);
};
const ShoppingList = () => {
const inputRef = useRef();
const [items, dispatch] = useReducer((state, action) => {
- switch (
- action.type
- /** CODE HERE */
- ) {
+ switch (action.type) {
+ case "add":
+ return [...state, { id: state.length, name: action.name }];
+ case "remove":
+ return state.filter((_, index) => index != action.index);
+ case "clear":
+ return [];
+ default:
+ return state;
}
}, []);
- const handleSubmit = () => {
- /** CODE HERE */
+ const handleSubmit = e => {
+ e.preventDefault();
+ dispatch({
+ type: "add",
+ name: inputRef.current.value
+ });
+ inputRef.current.value = "";
};
return (
@@ -34,9 +101,15 @@ const ShoppingList = () => {
+
{items.map((item, index) => (
- - {item.name}
+ -
+ {item.name}
+
+
))}
>
@@ -47,23 +120,28 @@ const App = () => {
return (
-
-
- Edit src/App.js and save to reload.
-
-
- Learn React
-
-
-
+
-
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..e6c4e7fc
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,18 @@
+{
+ "name": "udemy-react",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "immer": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-6.0.1.tgz",
+ "integrity": "sha512-oXwigCKgznQywsXi1VgrqgWbQEU3wievNCVc4Fcwky6mwXU6YHj6JuYp0WEM/B1EphkqsLr0x18lm5OiuemPcA=="
+ },
+ "use-immer": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/use-immer/-/use-immer-0.3.5.tgz",
+ "integrity": "sha512-0CNaJ/CtnF8/OmM4NBG7R0rhWMMQtgXPmWbakv8CK5z8dXeMaBYValFDXpkjBnToknjKJZuEPcoUZYd0rnQL2Q=="
+ }
+ }
+}
diff --git a/package.json b/package.json
index b804129f..2346a5bb 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,11 @@
"version": "0.1.0",
"private": true,
"dependencies": {
+ "immer": "^6.0.1",
"react": "^16.12.0",
"react-dom": "^16.12.0",
- "react-scripts": "3.2.0"
+ "react-scripts": "3.2.0",
+ "use-immer": "^0.3.5"
},
"scripts": {
"start": "react-scripts start",