import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div>{props.user.age}์ด - {props.user.name}</div>
);
}
const App = () => {
const users = [
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
];
return (
<div className="app-container">
{users.map((user) => {
return <User user={user} key={user.id} />;
})}
</div>
);
};
export default App;
โ JSํ์ผ์์ CSS๋ฅผ ๋ณ๋์ ๋ชจ๋(ํ์ผ)๋ก ๋ถ๋ฆฌ
โ className ์ ๋ฃ์ด์ฃผ๊ณ ์ปดํฌ๋ํธ์์ ์ ์ฉํ CSS ํ์ผ์ import
โ ์ถ๊ฐ/์ญ์ ๋ฅผ ์ํ ์ค๋น
import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div>{props.user.age}์ด - {props.user.name}</div>
);
}
const App = () => {
const [users, setUsers] = useState([
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
]);
const [name, setName] = useState(''); // <-- ์ ์ ์ ์
๋ ฅ๊ฐ์ ๋ด์ ์ํ
const [age, setAge] = useState('');
return (
<div className="app-container">
<input value={name}
placeholder="์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์"
// ์ธํ ์ด๋ฒคํธ๋ก ๋ค์ด์จ ์
๋ ฅ ๊ฐ์ name์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
onChange={(e) => setName(e.target.value)}
/>
<input value={age}
placeholder="๋์ด๋ฅผ ์
๋ ฅํด์ฃผ์ธ์"
// ์ธํ ์ด๋ฒคํธ๋ก ๋ค์ด์จ ์
๋ ฅ ๊ฐ์ age์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
onChange={(e) => setName(e.target.value)}
/>
{users.map((user) => {
return <User user={user} key={user.id} />;
})}
</div>
);
};
export default App;
โ user ์ถ๊ฐ
import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div className="user-card">
<div>{props.user.age}์ด - </div>
<div>{props.user.name}</div>
</div>
);
}
const App = () => {
const [users, setUsers] = useState([
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
]);
const [name, setName] = useState(''); // <-- ์ ์ ์ ์
๋ ฅ๊ฐ์ ๋ด์ ์ํ
const addUserHandler = () => {
const newUser = {
id: users.length + 1,
age: age,
name: name,
};
setUsers([...users, newUser]);
};
return (
<div className="app-container">
<input
value={name}
// ์ธํ ์ด๋ฒคํธ๋ก ๋ค์ด์จ ์
๋ ฅ ๊ฐ์ name์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
onChange={(e) => setName(e.target.value)}
/>
{users.map((user) => {
return <User user={user} key={user.id} />;
})}
<button onClick={addUserHandler}>์ถ๊ฐํ๊ธฐ</button>
</div>
);
};
export default App;
โ user ์ญ์
import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div className="user-card">
<div>{props.user.age}์ด - </div>
<div>{props.user.name}</div>
<button onClick={() => props.handleDelete(props.user.id)}>
์ญ์ ํ๊ธฐ
</button>
</div>
);
}
const App = () => {
const [users, setUsers] = useState([
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
]);
const [name, setName] = useState(''); // <-- ์ ์ ์ ์
๋ ฅ๊ฐ์ ๋ด์ ์ํ
const addUserHandler = () => {
const newUser = {
id: users.length + 1,
age: 30,
name: name,
};
setUsers([...users, newUser]);
};
const deleteUserHandler = (id) => {
const newUserList = users.filter((user) => user.id !== id);
setUsers(newUserList);
};
return (
<div className="app-container">
<input
placeholder="์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์"
value={name}
// ์ธํ ์ด๋ฒคํธ๋ก ๋ค์ด์จ ์
๋ ฅ ๊ฐ์ name์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
onChange={(e) => setName(e.target.value)}
/>
{users.map((user) => {
return <User user={user} key={user.id} handleDelete={deleteUserHandler}/>;
})}
<button onClick={addUserHandler}>์ถ๊ฐํ๊ธฐ</button>
</div>
);
};
export default App;
โ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ
import React from 'react';
import './App.css'; // ๐ฅ ๋ฐ๋์ App.css ํ์ผ์ import ํด์ค์ผ ํฉ๋๋ค.
//1. ๋ฒํผ ์ปดํฌ๋ํธ ์์ฑ
function CustomButton(props) {
return <button onClick={props.onClick}>{props.children}</button>;
}
// User ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํ
function User(props) {
return (
<div className="user-card">
<div>{props.user.age}์ด - </div>
<div>{props.user.name}</div>
//2. ๋ฒํผ์ ์ปดํฌ๋ํธ๋ก ๋ฐ๊พธ๊ธฐ
<CustomButton onClick={() => props.handleDelete(props.user.id)}>
์ญ์ ํ๊ธฐ
</CustomButton>
</div>
);
}
const App = () => {
const [users, setUsers] = useState([
{ id: 1, age: 30, name: '์ก์ค๊ธฐ' },
{ id: 2, age: 24, name: '์ก๊ฐ' },
{ id: 3, age: 21, name: '๊น์ ์ ' },
{ id: 4, age: 29, name: '๊ตฌ๊ตํ' },
]);
const [name, setName] = useState(''); // <-- ์ ์ ์ ์
๋ ฅ๊ฐ์ ๋ด์ ์ํ
const addUserHandler = () => {
const newUser = {
id: users.length + 1,
age: 30,
name: name,
};
setUsers([...users, newUser]);
};
const deleteUserHandler = (id) => {
const newUserList = users.filter((user) => user.id !== id);
setUsers(newUserList);
};
return (
<div className="app-container">
<input
placeholder="์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์"
value={name}
// ์ธํ ์ด๋ฒคํธ๋ก ๋ค์ด์จ ์
๋ ฅ ๊ฐ์ name์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ
onChange={(e) => setName(e.target.value)}
/>
{users.map((user) => {
return <User user={user} key={user.id} handleDelete={deleteUserHandler}/>;
})}
//3. ๋ฒํผ์ ์ปดํฌ๋ํธ๋ก ๋ฐ๊พธ๊ธฐ
<CustomButton onClick={addUserHandler}>์ถ๊ฐํ๊ธฐ</CustomButton>
</div>
);
};
export default App;
<div style={style}>
{users.map((user) => {
return <User user={user} key={user.id} />;
})}
</div>
โ
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ๋์ค(Redux) ์ค์ (0) | 2024.01.10 |
---|---|
Styled-Components ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง (0) | 2024.01.10 |
Counter ๋ง๋ค๊ธฐ : useState & ์ด๋ฒคํธํธ๋ค๋ฌ (0) | 2024.01.09 |
์์ด๋&๋น๋ฐ๋ฒํธ ์ ๋ ฅ alert&์ด๊ธฐํ (0) | 2024.01.09 |
๋ก๊ทธ์ธ&ํ์๊ฐ์ &๋ก๊ทธ์์ ๊ธฐ๋ฅ ๊ตฌํ(lv.4) (1) | 2024.01.09 |