728x90
λ°μν
π‘ μ€μ΅ ν¬μΈνΈ!
- μ€λμ λΈλ‘κ·Έ κΈλ°ν κΈ°λ₯μ λ§λ€μ΄λ³΄μλ€.
- λ§€λ² μ§§μ κ°μμ νμν λ΄μ©λ§ μ΄ν΄νκΈ° μ½κ² λ΄μλ΄λ κ°μλ ₯λ κ°μλ ₯μ΄μ§λ§, κ°μ¬λμ΄ νμλ λ§μμ΄λ κ°μλ ΈνΈκ° λ무 μ겨μ 곡λΆνλ©° μ½λ μμ±νλ κ² μ¬λ―Έμλ€.
- λ€ννλ 30μ΄ μκ°ν΄λ³΄κ³ "μ λͺ¨λ₯΄κ²λΉ μν~" νλ μΌμ μμκ³ , μ½λμμ±νκ³ λΈλΌμ°μ μμ μ§μ νμΈνλ λ°κΉμ§ 10λΆ μ λ κ±Έλ¦° κ² κ°λ€.
- MongoDB λ€λ£¨λ λ°©λ²λ μ 체μ μΌλ‘ νλ² κ³΅λΆνμΌλ λμ€μλ μ΄λ κ² 'λ±λ‘νκΈ°' λ²νΌμ ν΅ν΄ μ μ‘λ λ°μ΄ν°λ₯Ό DB μλ μ μ₯νκ³ λΆλ¬μ¬ μ μμ§ μμκΉ.
π μ¬μ©μκ° μ λ ₯ν κΈμ λ³μμ μ μ₯νκΈ°
π€ μ¬μ©μκ° input μ μ λ ₯ν λ°μ΄ν°λ₯Ό state λ‘ μ μ₯νκΈ°
- μ¬μ©μκ° input μ μ λ ₯ν λ°μ΄ν°λ μ€μν λ°μ΄ν°μ΄κΈ° λλ¬Έμ state μ μ μ₯νμ¬ μ¬μ©νλ κ² μΌλ°μ μ΄λ€.
let [input, setInput] = useState('');
- λ°λΌμ useState() λ₯Ό μ¬μ©νμ¬ state λ₯Ό νλ λ§λ€μ΄μ£Όμλ€.
- input νκ·Έμ μ΄κΈ°κ°μ 곡λμ΄λ―λ‘ λ°μ΄νλ‘ λΉ λ¬Έμμ΄μ ννν΄μ£Όμλ€.
π€ μ¬μ©μκ° input μ μ λ ₯ν κ° μμλ΄μ΄ state μ μ μ₯ν΄λ³΄κΈ°
function App() {
let [input, setInput] = useState('');
return (
<div className="App">
<input onChange={ (e)=>{ setInput(e.target.value) } } />
</div>
);
}
- input μ μ λ ₯ν κ°μ μκ³ μΆλ€λ©΄ input μ onChange λΌλ μ΄λ²€νΈνΈλ€λ¬λ₯Ό λΆμ¬μ μ¬μ©νλ©΄ λλ€.
- μΌλ°μ μΌλ‘ onChange λ input μ 무μΈκ°λ₯Ό μ λ ₯ν λλ§λ€ νΉμ ν¨μλ₯Ό λμμν€κ³ μΆμ λ μ¬μ©νλ€.
- e.target μ μ§κΈ μ΄λ²€νΈκ° λμνκ³ μλ HTML μμ μ¦, μ¬κΈ°μλ input μ μλ―Ένλ―λ‘ e.target.value λ input μ μ λ ₯ν κ°μ΄ λλ κ²μ΄λ€.
- λ°λΌμ μ μ½λλ₯Ό ν΄μνμλ©΄ input μ 무μΈκ°λ₯Ό μ λ ₯ν λλ§λ€ input μ μ λ ₯ν κ°μ setInput() μ λ£μ΄μ input μ κ°μ λ³κ²½νμ¬ μ μ₯ν΄λ¬λΌλ λ§μ΄ λλ€.
- μ΄λ¬ν λ°©λ²μ <input> μΈμλ <textarea>, <select> λ±μλ μ¬μ©μ΄ κ°λ₯νλ€.
π λΈλ‘κ·Έ κΈλ°ν κΈ°λ₯ λ§λ€κΈ°
π€ UI λμμΈν΄λ³΄κΈ°
<div className='publish'>
<input onChange={ (e)=>{ setInput(e.target.value) } } />
<button>λ±λ‘νκΈ°</button>
</div>
.publish {
margin: 20px 0;
}
.publish input {
width: 80%;
height: 25px;
font-size: 18px;
padding: 10px 15px;
border-radius: 5px;
border: 1px solid grey;
background: #eee;
}
.publish input:focus {
outline: none;
}
.publish button {
padding: 13px 30px;
}
.publish button:hover {
background: lightcoral;
color: white;
transition: all 0.5s;
transform: scale(1.05);
}
- κΈλ°νμ μν΄ λ¨Όμ κΈμ μ μ μ μλ UI λ₯Ό λ§λ€μ΄λ³΄μλ€.
- ν¬κ² λμμΈν νμλ μκ³ , input κ³Ό button λ§ λ£κ³ κ°λ¨ν ν¨κ³Όλ§ μ£Όμλ€.
π€ λΈλ‘κ·Έ κΈλ°ν κΈ°λ₯ λ§λ€κΈ°
// μ 체 μ½λ 미리보기
// μ 체 μ½λκ° λ무 κΈΈμ΄μ λΆνμν μ½λλ μ μΈνλ€.
function App() {
let [title, setTitle] = useState([
'[React] React μ€μΉμ κ°λ°νκ²½ μ
ν
νκΈ°',
'[React] JSX λ₯Ό μ΄μ©ν΄ HTML νμ΄μ§ μ μν΄λ³΄κΈ°',
'[React] React μμ state λ³κ²½ν΄λ³΄κΈ°'
]);
let [thumbsUp, setThumbsUp] = useState([0, 0, 0]);
let [clickedNum, setClickedNum] = useState(0);
let [input, setInput] = useState('');
function addTitle(input) {
let newTitle = [...title];
newTitle.unshift(input);
setTitle(newTitle);
}
return (
<div className="App">
{
title.map(function(content, idx){
return (
<div className='list' key={idx}>
<h3 onClick={()=>{setClickedNum(idx)}}>
{content}
<span className='thumbs-up' onClick={ ()=>{ changeThumbsUp(idx) } }>π</span>
{thumbsUp[idx]}
</h3>
<p>2022-03-18</p>
<hr/>
</div>
)
})
}
<div className='publish'>
<input onChange={ (e)=>{ setInput(e.target.value) } } />
<button onClick={()=>{addTitle(input)}}>λ±λ‘νκΈ°</button>
</div>
</div>
);
}
- κΈλ°ν κΈ°λ₯μ΄λ, input μ μ¬μ©μκ° κ²μκΈ λ΄μ©μ μμ±ν νμ 'λ±λ‘νκΈ°' λ²νΌμ λλ₯΄λ©΄ κ²μκΈ λ¦¬μ€νΈ μ€ λ§¨ μ κ²μκΈλ‘ μμ±ν κ²μκΈ λ΄μ©μ΄ λ±λ‘μ΄ λλ κ²μ΄λ€.
- κ²μκΈ λ¦¬μ€νΈμ μ¬μ©μκ° μμ±ν κ²μκΈμ΄ μΆκ°λλ €λ©΄ title μ΄λΌλ state μ μ μ₯λ array μ input μ μ λ ₯ν λ΄μ©μ 맨 첫 μμλ‘ μΆκ°ν΄μ£Όλ©΄ λλ€.
<button onClick={()=>{addTitle(input)}}>λ±λ‘νκΈ°</button>
- μ΄λ button νκ·Έμ onClick μμ±μ λ°λ‘ μ½λλ₯Ό μμ±ν΄μ£Όμ΄λ λμ§λ§ κ°λ μ±μ μν΄ λ°λ‘ addTitle() ν¨μλ₯Ό λ§λ€μ΄μ£Όκ³ input state λ₯Ό input μ΄λΌλ νλΌλ―Έν°λ‘ λ£μ΄μ£Όμλ€.
function addTitle(input) {
let newTitle = [...title];
newTitle.unshift(input);
setTitle(newTitle);
}
- addTitle() ν¨μλ μμ κ°μ΄ λ§λ€μ΄μ£Όμλ€.
- λ¨Όμ title μ΄λΌλ state μ μ μ₯λ array λ₯Ό κΉμ 볡μ¬λ₯Ό ν΄μ newTitle μ΄λΌλ μ¬λ³Έμ λ§λ λ€.
- λ§λ€μ΄μ§ μ¬λ³ΈμΈ newTitle array μ unshift() λ₯Ό μ¬μ©νμ¬ νλΌλ―Έν°λ‘ λ°μμ¨ input μ newTitle array μ 맨 μ²μ μμλ‘ μ½μ ν΄μ€λ€.
- κ·Έλ κ² λ§λ€μ΄μ§ newTitle array λ₯Ό setTitle() ν¨μμ λ£μ΄μ title μ΄λΌλ state μ μ μ₯λ array λ₯Ό newTitle array λ‘ κ΅μ²΄ν΄μ€λ€.
- μ΄μ input μ μ λ ₯νλ λ΄μ©μ΄ title μ΄λΌλ state μ μΆκ°κ° λκ³ , map() ν¨μλ₯Ό ν΅ν΄μ λ λλ§λκ³ λΈλΌμ°μ νλ©΄μ 보μ΄κ² λλ€.
728x90
λ°μν
'[κ°λ°] Practice > React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[React] μΌνλͺ° λ μ΄μμ λμμΈνκΈ° (1) | 2022.03.23 |
---|---|
[React] yarn κ³Ό React Bootstrap λΌμ΄λΈλ¬λ¦¬ μ€μΉνκΈ° (0) | 2022.03.22 |
[React] μΆμ² λ²νΌ κΈ°λ₯ μ€λ₯ μμ νκΈ° (0) | 2022.03.22 |
[React] props λ₯Ό μμ©ν μμΈνμ΄μ§ λ§λ€κΈ° (0) | 2022.03.21 |
[React] React μμ λ°λ³΅λ¬Έ νμ©νκΈ° (0) | 2022.03.21 |