-> npm๋ณด๋ค ์ฉ๋์ด ํจ์ฌ ์ ์
https://yarnpkg.com/
$ npm install -g yarn
-> ์์ ๋ฒ์ ์ผ๋ก ์ค์น๋จ (1.22.19)
$ corepack prepare yarn@stable --activate
-> ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ๋ ๋ฒ
Failed to load config "react-app" to extend from.
-> ํ์๋ถ์ด ์๋ ค์ฃผ์ ํด๊ฒฐ๋ฐฉ๋ฒ
$ yarn add sass
React app
https://create-react-app.dev/
$ npm create react-app ํด๋๋ช
$ npm start
App.js
import React, { useState } from "react";
import "./App.css";
import TodoBoard from "./components/TodoBoard";
function App() {
const [inputValue, setInputValue] = useState("");
const [todoList, setTodoList] = useState([]); // ์
๋ ฅํ ์์ดํ
์ ๋ชจ์์ค ๋ฐฐ์ด
const addItem = () => {
console.log("inputValue๋? : ", inputValue);
setTodoList([...todoList, inputValue]); // ๊ธฐ์กด array์ ์
๋ ฅ๋ inputValue๋ฅผ ์ถ๊ฐ. spread ์ด์ฉํ์ฌ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ด.
console.log("todoList๋? : ", todoList);
setInputValue(""); // input ์ด๊ธฐํ
};
return (
<div className="App">
<input
className="input-style"
type="text"
placeholder="ํ ์ผ์ ์
๋ ฅํ์ธ์"
onChange={(event) => setInputValue(event.target.value)}
value={inputValue} // input ์ด๊ธฐํ
/>
<button className="btn-style" onClick={addItem}>์ถ๊ฐ</button>
{/* todoList๋ฅผ(array๋ฅผ) props๋ก TodoBoard์ ์ ๋ฌ. ๋๋ถ๋ถ props์ด๋ฆ๊ณผ("=" ์๋ถ๋ถ) ์ ๋ฌํ ๋ณ์/ํจ์๋ช
์ ์ด๋ฆ์ ๊ฐ๊ฒ ํจ */}
<TodoBoard todoList={todoList} />
</div>
);
}
export default App;
TodoBoard.jsx
import React from "react";
import TodoItem from "./TodoItem";
// props๋ก ๋ช ๊ฐ๋ฅผ ๋ฐ์์ฌ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ map ์ฌ์ฉ
export default function TodoBoard(props) {
return (
<div>
<h1>Todo List</h1>
{props.todoList.map((item) => (
// ๋ฐ์์จ item์ ๊ฐ๊ฐ์ TodoItem์ ์ ๋ฌ
<TodoItem item={item} />
))}
</div>
);
}
TodoItem.jsx
import React from "react";
const TodoItem = (props) => {
console.log("props๋? : ", props);
return (
<div className="item">{props.item}</div> // ๋ฐ์์จ ์ด๋ฆ์ด item
);
};
export default TodoItem;