WeCode 3์ฃผ์ฐจ๋ถํฐ๋ ๊ธฐ์กด์ html, css, javascript๋ก ๋ง๋ค์๋ ์ฌ์ดํธ๋ฅผ react๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด ์งํ๋์๋ค!
changeHandler = (e) => {
this.setState({
userId: e.target.value,
userPw: e.target.value,
});
};
<input className='login_input' onChange={this.changeHandler} type='text' placeholder='์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ' />
<input className='login_input' onChange={this.changeHandler} type='password' placeholder='๋น๋ฐ๋ฒํธ' />
์ด๋ ๊ฒ ์์ฑํ์๋๋ฐ....!
์๋๋ ์ด์ ๊ฐ ์์๋คใ
ใ
ใ
changeHandler
๋ผ๋ ๊ณตํต์ event๋ฅผ ID input๊ณผ PW input ์์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์ผ๋๊นใ
ใ
ํด๋น state
์ userId
, userPw
๊ฐ ๊ฐ๋ฅดํค๋ e.target
์ด ๊ฐ์๊ฑฐ์ธ๊ฒ....!
์ ๋๊ฒ ๊ฐ๋จํ๊ฒ ํ๋ ธ๋คใ ใ ใ ใ ์ด๊ฑธ ๋ชฐ๋๋ค๐ญ๐ญ
changeIdHandler = (e) => {
this.setState({
userId: e.target.value,
});
};
changePwHandler = (e) => {
this.setState({
userPw: e.target.value,
});
};
<input className='login_input' onChange={this.changeIdHandler} type='text' placeholder='์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ' />
<input className='login_input' onChange={this.changePwHandler} type='password' placeholder='๋น๋ฐ๋ฒํธ' />
์ด๋ ๊ฒ ID event ์ PW event ๋ฅผ ์ชผ๊ฐ์คฌ๋ค!
์๋ ์ํจ.....๐
handleAddForm = () => {
if (this.state.userInput) {
this.setState({ commentArr: this.state.commentArr.concat(this.state.userInput) });
}
};
์ผ๋จ ํจ์ ๋จผ์ ์ ์ธํ๊ณ !
if (this.state.userInput)
๋ผ๋ ์กฐ๊ฑด์ ๊ฑธ์ด์ค๋ค!
๊ฑธ์ด์ค ์ด์ ๋ input ์ ์๋ฌด ๊ฐ๋ ์๋ค์ด์์ ๋ ๋๊ธ์ด ์ฌ๋ผ๊ฐ๋๊ฑธ ๋ฐฉ์งํ๊ธฐ ์ํด์!!
๊ทธ๋ด์ form
์ setState()
ํด์ฃผ๋๋ฐ, this.state.userInput
์ this.state.commentArr
์ concat
ํด์ค๋ค!!
์ฌ๊ธฐ์
userInput
์ด๋??
input
์ฐฝ์์ ๋ฐ์์จ ๋ฐ์ดํฐ์!! (user๊ฐ ์ ๋ ฅํ s๋๊ธ ๋ด์ฉ!)
<button>
์ onClick
ํ ๋๋ง๋ค ์คํ๋๋ ์ด๋ฒคํธ๋ก ๋ง๋ค์๊ณ , ์ฒ์์ ๋น ๋ฐฐ์ด์ด์์ง๋ง ํด๋ฆญํ ๋ ๋ง๋ค userInput
์ ๊ฐ์ commentArr
๋ฐฐ์ด์ด๋ ํฉ์ณ์ ๋ฐํํด์ค๋ค. ( concat
๋ฉ์๋๋ฅผ ํตํด์!!)
concat
์ ๊ธฐ๋ณธ ๋ฐฐ์ด๊ณผ ์ธ์๋ก ์ฃผ์ด์ง ๋ฐฐ์ด/๊ฐ์ ํฉ์ณ์ ์ ๋ฐฐ์ด์ ๋ฐํํ๋ ๋ฉ์๋์!!
์ฒ์์ ๊ธฐ๋ณธ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ด๊ณ , ์ธ์๋ก ๋ค์ด์จ ๊ฐ์userInput
๊ฐ!
๊ทธ๋ผ ๋์[ ] + "userInput"
ํฉ์ณ์[ "userInput" ]
๊ฐ ๋ฐํ!!!
๋ง์ฝ ๋ค์์ ๋ฒํผ์ ๋ ํด๋ฆญํ๋ฉด ์ด์ฐ ๋ ๊น??
[ "userInput" ] + [ "userInput2" ]
๊ฐ ๋์ด์[ "userInput", "userInput2" ]
์ด ๋๋ค!
๊ทธ๋ฆฌ๊ณ render() { return(
์์์ <div className='comments'>
</div>
์์ ์๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ์๋ค!!
{this.state.form.map((userInput, idx) => (
<CommentForm key={idx} name='Wecoder' comment={userInput} />
))}
์ด๊ฑด ์์งํ ์นํ๋์ด ์ณ์ฃผ์ ์ฝ๋๊ธด ํ๋ฐ....ใ .....ใ ใ ใ ใ .......
this.state.commentArr
์ ๋ํด map
์ ๋๋ฆฌ๋๋ฐ, map
์ ์ฝ๋ฐฑํจ์๋ฅผ ๋๊ฒจ์ค๋ ํ๋ผ๋ฏธํฐ๋ก userInput
์ ๊ฐ์ด ์ ๋ฌํด์ค๋ค! ( idx
๋ ๊ทธ๋ฅ key ๊ฐ์ ์ง์ ํ๋ ค๊ณ ๋๊ธด ์ธ์๋ผ์ ์์ธํ ์ค๋ช
์ ์๋ต...! ์ด key ๊ฐ์ ๋์ค์ ๋๊ธ ์ญ์ ๋ ๊ธฐํ ๋ฑ๋ฑ์์ ์๊ธดํ๊ฒ ์ธ ์์ ์
๋๋น)
map
๋ฉ์๋ ์์ฒด๊ฐ , ๋ฐฐ์ด์ ์์๋คํํ
ํจ์๋ฅผ ์ซ ์ ์ฉํ๊ณ ๋ฐํ๊น์ง ํ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์,
<CommentForm key={idx} name='Wecoder' comment={userInput} />
์์ key
๊ฐ๊ณผ comment
๊ฐ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์์(userInput)๊ณผ index ์์น ๊ฐ์ ์ ์ฉํ ํ <CommentForm/>
์ด๋ผ๋ ์ปดํฌ๋ํธ ์์ฒด๋ฅผ ๋ฐํ!!!
handlePressEnter = (e) => {
if (e.key === 'Enter') {
this.handleAddForm();
}
};
handlePressEnter
ํจ์๋ฅผ ์ ์ธํ๊ณ , ์์ handleAddForm
์ด๋ฒคํธ๋ฅผ ๋ฃ์ด์คฌ๋ค!
key === 'Enter'
๋ถ๋ถ์ด ํน์ดํ๋ฐ, ์ฒ์์ JS์ฒ๋ผ e.keyCode === 13
์ ๋ฃ์๋๋ฐ ์ ๋จน๋๊ฒ....ใ
ใ
!
๊ฒ์ํด๋ณด๋ react์์๋ e.key == 'Enter'
๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค๊ณ ...!
e.key
๋ก ๋ฐ๊พธ์๋ง์ ๋ฐ๋ก ์ ์ ์ฉ๋๋ค!!!!
handleAddForm
์ด๋ฒคํธ์ setState
๊ฐ์ userInput: ''
์ ์ถ๊ฐ๋ก ๋ฃ์ด์คฌ๋ค!
userInput
๊ฐ์ commentArr
์ด๋ concat
์ผ๋ก ํฉ์น ์ดํ์๋ userInput
์ ๋ด์ฉ์ ''
๋ก ์ง์ ํด์ค์ ๋ด์ฉ์ด ์ง์์ง ๊ฒ ์ฒ๋ผ ๋ณด์ด๋๋ก!
๊ทผ๋ฐ ๋ด์ฉ์ด ์์ง์์ ธ์ ๋ฉ๋ถใ ใ ใ ใ ใ
๋ค์๋ , react ์ธ์
์์ ๋ค์๊ฑด๋ฐ ํด๋น input์ ( ์ง์ง <input />
ํ๊ทธ์ )
value ๊ฐ์ ์ง์ ํด์ค์, setState
๋์ ๋, ๋ณ๊ฒฝ๋ state ๊ฐ์ผ๋ก input์ฐฝ์ ๋ด์ฉ์ด ๋ฐ๋ก๋ฐ๋ก ๋ฐ๋๊ฒ ํด์ฃผ๋ฉด ๋๋ค๊ณ ํ๋ค.
๊ทธ๋ผ.... input ์ฐฝ์ ์ด ํ๊ทธ๋ง ๋ฃ์ด์ฃผ๋ฉด ๋๋๊ฑฐ ์๋?
<input value={this.state.userInput} ์ด์ฉ๊ตฌ />
๋ ์ฉ~~~ ๋ฐ๋ก ๋จ๐๐
์ด๋ ๊ฒ ๋์ํจ!
์ฌ๊ธฐ๊น์ง ํ์(?) ๊ณผ์ ๋~!
ํ์ง๋ง ์ฌ๊ธฐ์ ๋ฉ์ถ๋ฉด NOJAM~~
์ด ์ธ์๋ โค๏ธ ๋ฒํผ, ๋๊ธ ์ ์นด์ดํธ, ํด๋ฆญ์ ๊ฒ์์ฐฝ ๋ฐ๋๋๊ฑฐ ๋ฑ๋ฑ ๊ตฌํํ๋ค! ์ด๊ฑด ๋ค์๊ธ์ ๊ณ์!
์ถ๊ฐ๋ก ๋ ๊ตฌํํ๊ณ ์ถ์๊ฑด,
1.๋๊ธ ๋ชจ๋๋ณด๊ธฐ
๋ฒํผ ํด๋ฆญ ์ ๋๊ธ ์ฐฝ ๋ค ๋ณด์ด๋๊ฑฐ(์ด๊ฑด class ๋ณ๊ฒฝํด์ ์ฝ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅํ ๋ฏ)
2. ๋ก๊ทธ์ธ ํ์ด์ง์ ํ์๊ฐ์ ์ฐฝ
3. main Nav_bar ์์ด์ฝ ํด๋ฆญ์ ๊ฒ์์์ผ๋ก ๋ณํ๋๊ฑฐ!
์๋ค๋ ๊ผญ ํด์ผ์ง~๋ ์๋๊ณ ...์๊ฐ ๋๋ฉด?? ์ผ๋จ ๋ฐ๋ฆฐ ๋ธ๋ก๊ทธ๋ถํฐใ ใ ใ ใ