๐ฑ ๊ธฐ์ : React, scss, jsx
๐ฑ ๊ธฐ๊ฐ : 2021/09/13 ~ 2021/10/01
๐ฑ ๋ฐ๋๋ผ JS๋ก ํด๋ก ํ๋ ๋์ ์บฃ์คํ๊ทธ๋จ์ ๋ฆฌ์กํธ๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์์ ๊ธฐ์ ์ ์ผ๋ก ๋งํ๊ฑฐ๋ ํผ์ ๋ง์ด ๊ณ ๋ฏผํ๊ณ , ๋ํ ์ธ์ ๊น์๋ ์ฝ๋๋ค์ ๊ธฐ์ตํ๊ณ ์ถ์ด์ ํฌ์คํ ์ผ๋ก ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
handleIdInput
์ handlePwInput
๋ฉ์๋๋, ์์ด๋ <input>
๊ณผ ํจ์ค์๋ <input>
์ ์
๋ ฅํ ํ
์คํธ๋ฅผ ๊ฐ๊ฐ ํด๋นํ๋ state
์ ์ ์ฅํ๋ ๋ฉ์๋์ด๋ค.
// ๊ธฐ์กด ์ฝ๋
handleIdInput = e => {
this.setState({
idValue: e.target.value,
});
};
handlePwInput = e => {
this.setState({
pwValue: e.target.value,
});
};
<input id="idInput" placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
onChange={this.handleIdInput} />
<input type="password" id="pwInput" placeholder="๋น๋ฐ๋ฒํธ"
onChange={this.handlePwInput} />
์ด๋ฒคํธ ๊ฐ์ฒด
e
์ ์ถ์ฒ๊ฐ ๊ฐ๊ฐ์<input>
๋ง๋ค ๋ค๋ฅด๊ณ , ์ ์ฅํด์ผ ํ state๊ฐ ๋ค๋ฅผ ๋ฟ. ๋ฉ์๋์ ํํ๋ ๋น์ทํ๋ค. ์ด๋ฅผ ํ๋์ ๋ฉ์๋๋ก ํฉ์น ๋ฐฉ๋ฒ์ ์๋์ง์ ๋ํ ๊ณ ๋ฏผ์ ๊ธธ๊ฒ ํ์๋ค.
์ฌ์ค ์ด๋๋ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃฌ ์ง ์ผ๋ง ์ ๋์์ ๋๋ผ, ์๋์ ๊ฐ์ ๋ฏธ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ค๋ณต๋๋ ๋ฉ์๋๋ฅผ ํฉ์น๋ ค๊ณ ํ์๋ค. (์๊ฐ์ด ์ค์ ๋ก ์ค๋ ์ง์ฒด๋๊ธฐ๋ ํ์๋ค.)
// ์๋ํ๋ ์ฝ๋
handleInput = e => {
this.setState({
IdValue: e.target.value,
pwValue: e.target.value,
});
};
<input id="idInput" placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
onChange={this.handleInput} />
<input type="password" id="pwInput" placeholder="๋น๋ฐ๋ฒํธ"
onChange={this.handleInput} />
<input>
์ ๋ค๋ฅธ๋ฐ, ํ๋์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด ์์ด๋ <input>
์ ์
๋ ฅํ๋ ์
๋ ฅ๊ฐ์ด IdValue์๋, pwValue์๋ ์ ์ฅ์ด ๋๋ค๋ ์ ์ ๊นจ๋ฌ์๋ค.event.target
์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ง์ ๋ฐํํ๊ฑฐ๋, ์์ฑ์ ๊ฐ๋ฆฌํฌ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.<input>
ํ๊ทธ ์์ name
์์ฑ์ ์ด์ฉํ์ฌ input handler๋ฅผ ํฉ์น๋ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋ค.// ๋ฆฌํฉํ ๋ง ํ์ ์ฝ๋
construct() {
super();
this.state= {
email: '',
password: '',
}
}
handleInput = e => {
const { name, value } = e.target;
this.setState({
[name] : value;
});
};
<input id="idInput" name="email" placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
onChange={this.handleInput} />
<input type="password" id="password" name="pwName" placeholder="๋น๋ฐ๋ฒํธ"
onChange={this.handleInput} />
state
๋ช
์ ๊ฐ <input>
์ name
๊ณผ ๋๊ฐ์ด ์ค์ . (๊ณ์ฐ๋ ์์ฑ๋ช
!)handleInput
๋ฉ์๋์ <input>
์ name
์์ฑ์ ์ด์ฉํ์ฌ ๊ฐ๊ฐ ๋ค๋ฅธ <input>
๋ง๋ค state
๊ฐ์ ์ ์ฅ์์ผ ์ค ์ ์๋ค.<a>
๋งํฌ ๋์ <Link>
// ๊ธฐ์กด ์ฝ๋ - ์ด๋ํ ๊ฒฝ๋ก๊ฐ ์์ด ๊ฒฝ๋ก ๋ฏธ์ง์
<a href="#" className="pwForgot">
๋น๋ฐ๋ฒํธ๋ฅผ ์์ผ์
จ๋์?
</a>
<a>
๋ ์๋ก๊ณ ์นจ ํ๋ ๊ฒ์ฒ๋ผ html ํ์ด์ง ๋ฌธ์ ์์ฒด๋ฅผ ๋ค์ ๋ฐ์์ค๊ฒ ๋๋ฉฐ, ๋๊ฐ์ ๋ถ๋ถ์ ๋ถ๋ฌ์ค๋๋ผ๋ ๋ค์ ํ์ฑํด์ผ ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ๋ฉด์ผ๋ก๋ ์ข์ง๊ฐ ์๊ณ , ์์์ ์ผ๋ก ๋ญ๋น๊ฐ ๋๋ค.<Link>
๋ ๋๊ฐ์ ๋ถ๋ถ์ ๋ค์ ํ์ฑํ์ง ์๊ณ , ์๋ก ๋ถ๋ฌ์ฌ ์ปดํฌ๋ํธ๋ง ํธ์ถํด ์ฃผ๋ฏ๋ก ๋ ๋๋ง ์ต์ ํ๋ฅผ ํ ์ ์๊ฒ ๋ค.// ๋ฆฌํฉํ ๋ง ํ์ ์ฝ๋
// Link import๋ฌธ ์ค์
import { Link } from 'react-router-dom';
// ์ด๋ํ ๊ฒฝ๋ก๊ฐ ์์ด ๊ฒฝ๋ก ๋ฏธ์ง์
<Link to="#" className="pwForgot">
๋น๋ฐ๋ฒํธ๋ฅผ ์์ผ์
จ๋์?
</Link>
๐ก ์ ์ง์ํ๋ ๊ฒ์ด ์ข์๊น?
์ฐ์ style ์์ฑ์ด ๊ธธ์ด์ง๋ค๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์ง ์๊ฒ ๋๋ค. ๋ํ html ํ๊ทธ ์์ ์ธ๋ผ์ธ style๋ก ์ง์ ํ๋ ๊ฒ์ css ํ์ผ ์ ์ฉ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์์ง๊ธฐ ๋๋ฌธ์, ํ์ฑ ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ๋ ์ ์๊ฒ ๋ค.
// ๋ฆฌํฉํ ๋ง ํ์ ์ฝ๋
constructor() {
super();
this.state = {
email: '',
password: '',
buttonColor: false,
};
}
buttonColorChange = () => {
const { idValue, pwValue } = this.state;
const isButtonActive = email.includes('@') && password.length >= 5;
this.setState({ buttonColor: isButtonActive });
};
<button className={buttonColor ? 'loginOn' : 'loginOff'}> ๋ก๊ทธ์ธ </button>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
import { Component } from 'react';
import CenterBar from './components/topUserSearch/CenterBar';
import MainFeed from './components/mainFeed/MainFeed';
import SideBar from './components/sideBar/SideBar';
import './Main.scss';
.png
).scss
)
- ๊ฑฐ์ง๋, ๊ฐ์ง์, ์ํ ๋ฐ์ดํฐ.
- ๋ฐฑ์๋ API๋ฅผ ๋ชจ๋ฐฉํ ๋ฐ์ดํฐ.
constructor() {
super();
this.state = {
profileLayer: false,
feedInfo: [],
};
}
componentDidMount() {
fetch('http://localhost:3000/miyeon/data/mainFeed.json', { method: 'GET' })
.then(res => res.json())
.then(data =>
this.setState({
feedInfo: data,
})
);
}
componentDidMount()
: ์ปดํฌ๋ํธ๊ฐ mount ๋๋ ์์ ์ ์์ฑ๋๋ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์ด๋ค. ์ด ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ก ํ๋ค.fetch
ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ http ์์ฒญ์ ๋ณด๋ผ API ์ฃผ์, ๋ ๋ฒ์งธ ์ธ์๋ก๋ ์์ฒญ์ ๋ณด๋ผ ๋์ ์ต์
์ ๋ฃ๋๋ค..then(res => res.json())
: res๋ http ํต์ ์์ฒญ/์๋ต ์ค ์๋ต์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ response object์ด๋ค. ์๋ต์ผ๋ก ๋ฐ๋ JSON ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ json()
๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ return ํด์ผ ํ๋ค..then(data => this.setState({ feedInfo: data, }));
: json ํ์ผ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ค์ ๋ฐฐ์ด์ ํํ์ด๋ฏ๋ก, ๋ฐฐ์ด state์ธ feedInfo์ ๋ฎ์ด์์ด๋ค.json ํ์ผ๋ก ๋ถ๋ฌ์จ ๊ฐ์ฒด๋ค์, main.js์ state ๋ฐฐ์ด๋ก ์ ์ฅ์ด ๋์๋ค.
๐ก ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์ํ ๋ json ํ์ผ ๋ด๋ถ์ ์๋ ๊ฐ์ฒด๋ค์ ์์ ์ด ๋ถ๊ฐํ์ง๋ง, main.js์ state์์ ์์ ๋ฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
.map()
๋ฉ์๋๋ก ๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ ๋ฟ๋ฆฌ๊ธฐ์บฃ์คํ๊ทธ๋จ์ ํ๋์ฉ์ ํผ๋๋ฅผ ๋ด๋ <article>
๋ฅผ ์ปดํฌ๋ํธํ ํด์ฃผ์๋ค.
mainFeed.json์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ํผ๋์ ์ ๋ณด๋ฅผ ๋ช ๊ฐ์ฉ ๋ด์ ์ฃผ์๊ณ , ์ด๋ฅผ state ๊ฐ์ผ๋ก ๋ฐ์์ผ๋ ๋ฐ๋ณต๋๋ ์ฌ๋ฌ ๊ฐ์ ํผ๋ ์ปดํฌ๋ํธ๋ฅผ .map()
๋ฉ์๋๋ก ๋ฟ๋ ค ๋ณด์๋ค.
<div>
{this.state.feedInfo.map(user => {
return (
<MainFeed userData={user}
key={user.no} />
);
})}
</div>
.map()
๋ฉ์๋๋ก ํผ๋ ์ปดํฌ๋ํธ ํ๋์ฉ ๋ฟ๋ ค ์ค ๊ฒ์ด๋ค.key
๋ ๋ฌด์กฐ๊ฑด ์์ ์ปดํฌ๋ํธ๊ฐ ์๋, ๋ฟ๋ ค์ค ์ปดํฌ๋ํธ๋ฅผ ๋ช
์ํ๋ ๋ถ๋ถ์์ ์ ์ธํ์. key
๋ฅผ ์ธ๋ฑ์ค๋ก ์ง์ ํ๋ ๊ฒ๋ ์ง์ํด์ผ ํ๋ค.constructor() {
super();
this.state = {
inputVal: '', // Input์ ์
๋ ฅ๋๋ ํ
์คํธ๋ฅผ ๋ฐ์ ์ฉ๋
commentList: [], // ์
๋ก๋ ๋ ๋๊ธ์ ๋ฐ์ ๋ฐฐ์ด
};
}
// ๋๊ธ ์
๋ก๋ ๋ฉ์๋
addMyComment = e => {
e.preventDefault();
const { commentList, inputValue } = this.state;
const newArr = [
...commentList,
{
id: commentList.length + 1,
name: 'buzzi_nyang',
content: inputValue,
}, // ๋๊ธ ํ๋ ์
๋ก๋ ์ ์ถ๊ฐ๋ ๋๊ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๋๋ค.
];
this.setState({
commentList: newArr,
inputValue: '', // input์ฐฝ ํ
์คํธ ์ด๊ธฐํ
});
};
e.preventDefault();
: ํด๋น ๋ฉ์๋๊ฐ ์คํ๋๊ณ ๋๋ฉด ํ์ด์ง๊ฐ ๋ค์ ๋ ๋๋ง๋๋ฏ๋ก, ๋ฆฌ๋ ๋๋ง์ ๋ง์์ฃผ๊ณ ์ ์ผ๋ค.
...commentList
: commentList์ ๋ด๊ฒจ์๋ ์์๋ค์ ๋ณต์ ํด์จ๋ค.
๐ก Three dot ํ๊ธฐ๋ฒ : ๋ฐฐ์ด์์ ์ฐ์ผ์, ๋ฐฐ์ด1์ ์์๋ค์ ๋ฐฐ์ด2์ ํ๋์ฉ ๋ถํฌ๋์ด ๊ณ ๋ฅด๊ฒ ์ถ๊ฐํ๊ณ ์ถ์๋ ...๋ฐฐ์ด1 ๊ณผ ๊ฐ์ด ์ฐ์ธ๋ค. ์ ์ธ๊ฐ๋ก ์๋ตํ๋ ๊ฒ ๊ฐ๋ค.
Array.concat()
๋ฉ์๋์ ์ฐ์์ด ๋น์ทํ๋ค.
๋๊ธ ํ๋ ์ ๋ก๋ ์ ์ถ๊ฐ๋ ๋๊ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๊ณ , ์๋ก์ด ๋ฐฐ์ด newArr๋ฅผ ์ ์ธํ์ฌ newArr์ ์ด๋ค์ ๋ด๋๋ค.
3๋ฒ์์ ์ ์ฅํ๋ ๋๊ธ์ ์ ๋ณด ๋ฐฐ์ด newArr๋ฅผ ๊ธฐ์กด ๋ฐฐ์ด commentList ์ ๋ฎ์ด์์ด๋ค.
๋ฎ์ด ์์ฐ๋ ๋ฐฉ๋ฒ ๋ง๊ณ , ํ์ฌ ์ ๋ก๋๋ ๋๊ธ ๊ฐ์ฒด ํ๋๋ง์ ๊ธฐ์กด ๋ฐฐ์ด์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๋์ง. ๊ธฐ์กด ๋ฐฐ์ด์ ๋๊ธ ๊ฐ์ฒด ํ๋๋ฅผ ์ถ๊ฐํด๋ ๋๊ธ ๋ฐ์ดํฐ๋ค์ด ์์๋ ๋ฐฉ๋ฒ์ ์๋์ง์ ๋ํ ๊ณ ๋ฏผ์ ํ์๋ค. ํด๋น ๋๊ธ ๊ฐ์ฒด๋ฅผ []๋ก ๋ฌถ์ด ๋ฐฐ์ดํ ํ์ฌ,
commentList.push([ํด๋น๋๊ธ๊ฐ์ฒด])
๋ก ํ๋ฉด ๋์ง ์์๊น?
ํนํ input์ฐฝ์ ์
๋ ฅ๋ ํ
์คํธ๋ฅผ ์ด๊ธฐํํ๋ ๋ถ๋ถ์์ ์ ๋ฅผ ๋ง์ด ๋จน์๋ค. ๋๊ธ์ ์
๋ก๋ํ ๋ค์, ๋๊ธ ์
๋ ฅ์ฐฝ <input>
์ ์ฌ๋ ธ๋ ๋๊ธ ๋ฌธ์์ด์ด ๋ค ์ด๊ธฐํ๋์ด์ผ ํ๋๋ฐ, ์๋ ์ฝ๋๋ก๋ ์ด๊ธฐํ๊ฐ ๋์ง ์๊ณ ๋ฌธ์์ด์ด ๊ทธ๋๋ก ๋จ์ ์์๋ ๊ฒ์ด๋ค.
// ๊ธฐ์กด ์ฝ๋
this.setState({
commentList: newArr,
inputValue: '', // input์ฐฝ ํ
์คํธ ์ด๊ธฐํ
});
console.log(inputValue)
๋ฅผ ์ฐ์ด ๋ณด๋ฉด ๋น ๋ฌธ์์ด์ด ๋์ค๊ธด ํ๋๋ฐ, <input>
์ ๋ฌธ์์ด์ ์ด๊ธฐํ๊ฐ ๋์ง ์๊ธธ๋ ์๋์ ๊ฐ์ด ์์ ์ ํ์๋ค.// ์์ ํ ์ฝ๋
this.setState({
commentList: newArr,
inputValue: '', // input์ฐฝ ํ
์คํธ ์ด๊ธฐํ
});
let length = document.getElementsByClassName('.wrapper').length;
e.target[length].value = '';
<article>
์ ๊ฐ์๋ฅผ ๊ณ์ฐํด์, ํ์ฌ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๊ณ ์๋ ์์์ value ๊ฐ์ ๋น๊ฐ์ผ๋ก ์ค์ ํ๋๋ <input>
์ ๋ฌธ์์ด์ด ์ด๊ธฐํ๋์์๋ค.Ref
๋ผ๋ ๊ฒ์ ์ธ ์ ์๋ค๊ณ ํ๋ค.๐ก
Ref
? : ๋ฆฌ์กํธ์์ state๋ก๋ง ํด๊ฒฐํ ์ ์๊ณ , DOM์ ๋ฐ๋์ ์ง์ ๊ฑด๋๋ ค์ผ ํ ๋ ์ฌ์ฉํ๋ค. HTML์ ์์ฑํ ๋ ํ๊ทธ์ id๋ฅผ ๋ถ์ด๋ ๊ฒ์ฒ๋ผ, ๋ฆฌ์กํธ์์๋ DOM์ ์ด๋ฆ์ ๋ค๋ ๋ฐฉ๋ฒ์ด๋ค.
.wrapper
ํด๋์ค๋ช
์ ๊ฐ์ง ์์๊ฐ ์ถ๊ฐ๊ฐ ๋๋ค๋ฉด UI๊ฐ ๋ง๊ฐ์ง ์ ์์ด, ์ด ๋ฐฉ๋ฒ์ ์ ์ ํ์ง ์๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ๋ฐ๋ผ์ ์์ ํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.// ๋ฆฌํฉํ ๋ง ํ ์ฝ๋
this.setState({
commentList: newArr,
inputValue: '', // input์ฐฝ ํ
์คํธ ์ด๊ธฐํ
});
handleInput = e => {
this.setState({
inputValue: e.target.value,
});
};
<input className="comment"
placeholder="๋๊ธ ๋ฌ๊ธฐ..."
value={inputValue}
onChange={this.handleInput} />
<input>
์ value ์์ฑ์ ๋ถ์ฌํ๊ณ , ์
๋ ฅ๋ฐ๋ state์ธ this.state.inputValue
๋ฅผ ๊ทธ๋๋ก ์จ์ฃผ์๋ค. ๊ทธ๋ฌ๋ฉด <input>
์ value๋ ์
๋ ฅํ๋ ๋๋ก ์จ์ง ํ
๊ณ , state์ธ inputValue์๋ ๊ทธ๋๋ก ์ ์ฅ์ด ๋ ํ
๊ณ , ๋๊ธ์ด ์
๋ก๋ ๋๋ค๋ฉด <input>
์ ๋ฌธ์์ด๋ ์ด๊ธฐํ ๋ ๊ฒ์ด๋ค..filter()
๋ฉ์๋๋ฅผ ์ฒ์ ์จ ๋ณด์๋ค. ์ ์ํ๋ ๋ฐ๊น์ง ์ดํ์ ๊ฑธ๋ ธ๋ ๊ฒ ๊ฐ๋ค.
// ๋๊ธ ์ญ์ ๋ฒํผ ์ด๋ฏธ์ง
<img src="./images/miyeon/trash.png"
onClick={() => this.props.deleteComment(comment.id)}
alt="deleteComment" />
// ๋๊ธ ์ญ์ ๋ฉ์๋
uploadDeleteComment = id => {
const deleteMyComment = this.state.commentList.filter(
comment => comment.id !== id
);
this.setState({
commentList: deleteMyComment,
});
};
filter
๋ฉ์๋๋ฅผ ์ผ๋ค.์ ํํ์ง ์์ ๋๊ธ ์์๋ true๋ก, ์ด๋ค๋ง ์๋ก์ด ๋ฐฐ์ด์ด ๋ง๋ค์ด์ง๋ค. ์ ํํ ๋๊ธ ์์๋ ์ญ์ ํ ๋๊ธ ์์์ด๋๊น, ํด๋น ์กฐ๊ฑด์์ด ์ฑ๋ฆฝ์ด ๋์ง ์์ false๋ก ๋๋ฉฐ, ๊ธฐ์กด ๋ฐฐ์ด์์ ๋น ์ง๊ฒ ๋๋ ๊ฒ์ด๋ค.
.filter()
๋ฉ์๋๋ ์ฌ์ค ์์ง๊น์ง๋ ๋ฏ์ค๋ค.
<div className={this.state.searchLayer ? 'searchOn' : 'searchOff'}>
<ul className="searchUsersul">
{this.state.users
.filter(people => {
if (this.state.searchKeyword === '') {
return people;
} else if (
people.id.toLowerCase().includes(this.state.searchKeyword.toLowerCase())
) {
return people;
}
})
.map(userArr => {
return <NavUserSearch usersInfo={userArr} key={userArr.no} />;
})}
</ul>
</div>
<input>
์ ํด๋ฆญํ ๋๋ง๋ค ํด๋์ค๋ช
๋ณ๊ฒฝ์ผ๋ก On/Off ๋ฅผ ํ ์ ์๊ฒ ํ๋ค..filter
๋ฉ์๋๋ฅผ ์ผ๋ค.if (this.state.searchKeyword === '') return peopleArr;
<input>
์ ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์์์ ๋, ๋ชจ๋ ์ ์ ๋ชฉ๋ก์ ๋ณด์ฌ ์ฃผ๊ณ ์ถ์ด์ ํด๋น ์กฐ๊ฑด๋ฌธ์ ์ค์ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ตณ์ด ์จ ์ฃผ์ง ์์๋ ๋ฌธ์ ์์ด ์๋ํ๋ค..map()
๋ฉ์๋๋ก ๋๋ฆฐ๋ค.<NavUserSearch />
๋ก ์ปดํฌ๋ํธํ ํด์ฃผ์๋ค.usersInfo={userArr}
์ ๋ฌํด ์ค๋ค.๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋จ์ ํด๋ก ๋ง ํ ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ธฐ๋ฅ ๊ตฌํํ๋ ๊ฒ์ ๋ฑํ์ํ ์ฑ๋ก, ๋ฏธ์ ์ธ ๋ฉด์๋ง ์ง์ฐฉํ์๋ค. ๋ฌด์กฐ๊ฑด ์ธ์คํ๊ทธ๋จ ์๋ณธ๊ณผ ๋๊ฐ์ด ๋ฐ๋ผ ํ๋ ค๊ณ , ๋ฏธ์ ์ผ๋ก ๊น๋ํ๊ณ ์๋ป ๋ณด์ด๋ ๊ฒ์ ์ฐ์ ์์๋ฅผ ๋์๋ค. ๋จ์ ํด๋ก ์ ๋๋ด๊ณ ๋์ ๋ฐ์ฑ์ ๋ง์ด ํ๋ค.
๋ ์์๊ฒ ๋ง๋ค๋๋ผ๋, ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ๋ฆฌํฉํ ๋ง ํ๋ฆฌํฐ์ ์ฐ์ ์์๋ฅผ ๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค. ๐
๋ฆฌ์กํธ๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์์, ๋ฆฌ์กํธ์ ๋ฌธ๋ฒ์ ์ต์ํด์ง๊ณ ์ ํ์ ๊ตฌํ์ด ์๋ ๊ธฐ๋ฅ๊น์ง ๋ชจ๋ ๋ฆฌ์กํธ์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ๊ณ ์น๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
๋ง์นจ ์ถ์ ์ฐํด๊ฐ ๋ผ์ด ์๋ ๋๋ถ์ ๋ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ ์๊ฐ์ ๋ฒ๊ฒ ๋์ด ์ด๋ ์ ๋ ๋ฆฌ์กํธ์ ์ต์ํด์ง ๊ฒ ๊ฐ๋ค.
ํนํ state์ props๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํด์ผ ํ ์ง ๊ฐ์ ์ก์ ์ ์์๋ค. ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ฅด๊ธฐ์, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ state์ props๋ฅผ ๊ด๋ฆฌํด ์ฃผ๋ ๊ฒ ์ข๋ค๋ ๊ฒ๋ ๋ช ํํ๊ฒ ์์๋ค.
๊ตฌํํ ๊ธฐ๋ฅ์ด ๋ง์์๋ก ๋ฆฌํฉํ ๋งํ ๊ฒ์ด ๋ง์์ง๊ณ , state์ props์ ๊ด๊ณ๋ ๋ณต์กํด์ ธ์ ํท๊ฐ๋ฆฌ๊ธฐ ์์ํ๋ค. ๋ค์ ํ๋ก์ ํธ ํ ๋๋ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ์ ๊ด๊ณ๋ฅผ ์๊ฐํด ๊ฐ๋ฉด์, ํท๊ฐ๋ฆผ์ด ๋ํ๊ฒ๋ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
๋ด๊ฐ ์ง ์ฝ๋๊ฐ ๋ฆฌ์กํธ์ ์ด์ธ๋ฆฌ๋์ง ๊ณ ๋ฏผ์ ์ ๋ง ๋ง์ด ํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
์๋๋ ์ค์ค๋กํํ ์๊ฒฉํ ํธ์ด์ง๋ง, ์ด๋ฒ ๋ฆฌ์กํธ ํด๋ก ์ ํตํด ๊ฒ์ด์ ๋ง์ด ํ ์ ์์๋ ๊ธฐํ๊ฐ ๋์๋ค. ์ด๋ค ์ฝ๋๊ฐ, ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ์ ํจ์จ์ ์ด๊ณ ํฉ๋ฆฌ์ ์ธ์ง์ ๋ํด ๊ณ ๋ฏผํ๊ณ ๋ฆฌํฉํ ๋ง ํ๋ ๋ฐ์ ์๊ฐ์ ์ ๋ง ๋ง์ด ์์๋ค. ๐