January 17, 2021
return (
<>
..... ์ค๋ต .....
<ul>
{props.toDos.map(toDo => (
<ToDo {...toDo} key={toDo.id} />
// {text: "asd", id: 1610861319410}
))}
</ul>
</>
)
props ๋ฅผ ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก props ์ ์ด๋ฆ์ ๋ช ์ํ์ง ์๊ณ ๋,
๊ฐ์ฒด ์์ spread operator ๋ง์ผ๋ก๋ ๋ด๋ฆด ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
const ToDo = props => {
return (
<li>
{props.text} <button>DEL</button>
</li>
)
}
์ปดํฌ๋ํธ ์ธ์์ ({ text }) ๋ก ๋ฐ์ ์ ์์ง๋ง์ ๋๋ console ๋ก๊ทธ๋ก ๋ค์ ์ ํ์ธํด ๋ณด๊ณ ์ถ์ด์ ์ผ๋ถ๋ฌ props ๋ก ์ด์ด ๋ฐ๊ฒ ํ๋ค.
๊ทธ๋ฌ๋ฉด Home.js ์ ์๋ handleSubmit ํจ์๊ฐ mapDispatchToProps ๋ฅผ ํตํด ์ ๋ฌํ props.addToDo(text) ๋ฅผ ์คํํด์,
reducer ์์ toDos ์ state ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋ง๋ ๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์์ ์ถ๊ฐ ๋๋ ๊ธฐ๋ฅ์ ์ ๋๋ก ํ์ธํ ์ ์๊ฒ ๋๋ค.
์์ฑํ todo ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ํ๋ ค๋ฉด reducer ์์ ์ํ ๋ณ๊ฒฝ์ ์ผ์ผํค๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
์ํ ๋ณ๊ฒฝ์ ์ผ์ผํค๊ฒ ํ๋ ๋ฉ์๋๊ฐ ๋ฐ๋ก
store.dispatch(actionHandler()) ์ด๋ค.
ToDo Component ๋ ์ค๋ก์ง dispatch ๋ง ์ ๊ฒฝ์ด๋ค.
reducer ์ deleteToDo ๋ฅผ ์ํํ๋ action handler ํจ์๋ฅผ ๋ณด๋ธ ๋ค reducer ์์ ์ค์ ์ํ๋ฅผ ์ง์ฐ๊ฒ ๋ณ๊ฒฝํ๋๋ก ๋ง๋๋ ๊ฑฐ์ง!
๊ทธ๋ผ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก dispatch ๋์์ ์ ๊ทผ ํ๋๊ฐ?
mapStateToProps, mapDispatchToProps ์ค์์, mapDispatchToProps ๋ฅผ ์ธ ๊ฒ์ด๋ค. ๋ฐ๋ก ์ด ์ปดํฌ๋ํธ์!
์๋ํ๋ฉด ToDo ์์ reducer ์๊ฒ ๋ฉ์์ง๋ฅผ (์ํ๋ฅผ ์ง์ฐ๋๋ก) ๋ณด๋ด๊ธฐ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ToDo Component ์์๋ state ์ ๋ํด์๋ ์ ๊ฒฝ์ธ ํ์๊ฐ ์์ผ๋ฏ๋ก mapDispatchToProps ๋ ์ฌ์ฉํ์ง ์๋๋ค.
const mapDispatchToProps = (dispatch, ownProps) => {
console.log(ownProps)
}
์ด๋ฒ์๋ ownProps ๋ ์ฌ์ฉํ ๊ฒ์ด๋ผ ํ๋ผ๋ฏธํฐ์ dispatch, ownProps ๋ ๊ฐ์ด ๋ฃ์๋ค.
console.log ๋ก ownProps ๊ฐ ์ด๋ค ๊ฒ์ ๋ฐ๋์ง ํ์ธํด ๋ณด์๋ค.
{text: "hello", id: 1610862082393}
์ด์ mapDispatchToProps ๋ฅผ ํตํด ํ์ฌ ToDo Componenet ์ props ๋ก mapDispatchToProps ๊ฐ
๋ฆฌํดํ๋ ๊ฒ์ ๋ฐ์ ์ ์๊ฒ export ๋ถ๋ถ์ ๊ณ ์ณ ๋์.
export default connect(null, mapDispatchToProps)(ToDo)
mapStateToProps ๋ฅผ ์ฌ์ฉํ์ง ์์ ๋๋ null ๋ก ๋๋ฉด ๋๋ค.
const mapDispatchToProps = (dispatch, ownProps) => {
// console.log(ownProps);
return {
onBtnClick: () => dispatch(actionCreators.deleteToDo(ownProps.id)),
}
}
onBtnClick ์ ์ด์ ํ์ฌ ์ปดํฌ๋ํธ์์ props ๋ก ๋ฐ์ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ onBtnClick ์ด ์คํํ๋ ๊ฒ์ ๋ฐ๋ก dispatch ์ด๋ค.
์์ ์ก์ ํธ๋ค๋ฌ ํจ์์ธ deleteToDo ๋ฅผ ์คํ์ํค๊ณ ํ๋ผ๋ฏธํฐ๋ก ownProps ์ id ๋ฅผ ๋ฐ์์ฌ ์ ์๋ค.
const ToDo = props => {
console.log(props)
// ? {text: "hi", id: 1610862445794, onBtnClick: ฦ}
return (
<li>
{props.text} <button onClick={props.onBtnClick}>DEL</button>
</li>
)
}
์์์ ํ์ธํ ์ ์๋ฏ ์ด์ props ์ onBtnClick ์์ฑ์ด ๋ค์ด์ ์๋ค.
์ด์ ์ด ํจ์๋ฅผ ๋ฒํผ์ onClick ์ ์ฐ๊ฒฐํ์.