๐Day 78(52)์ผ์ฐจ WE_MOTIVATION_DIARY
18729 ๋จ์ด MOTIVATION_DIARYMOTIVATION_DIARY
- ํ๋ก์ ํธ ์งํํํฉ
- ๋ด๊ฐ ๋ง๋ ํ์ด์ง : ๋ฆฌ์คํธ ํ์ด์ง
- ๊ธฐ๋ฅ ๊ตฌํ :
- ์ ํ ํธ๋ฒ์ ์ํ ๋ํ
์ผ ์ฐ์ 4๋ฒ ๋ณ๊ฒฝ,
- ์์๋ณ ์ ํ ์ฌ์ง ๋ณ๊ฒฝ
- ๋ฌดํ ์คํฌ๋กค ๋ฐ ๋ก๋ฉ ํํ
- ๋ฐ์ํ ์ํ ๊ฐฏ์๋ฅผ 5๊ฐ์์ 2๊ฐ๋ก
- ํ๋จ์ gototopbutton๊ณผ top์ผ๋ก ๊ฐ๋ฅ ๊ธฐ๋ฅ ๊ตฌํ
- gototopbutton์ ๋ฒํผ์ ํ์ด๋ผ์ดํธ ๊ธฐ๋ฅ
- ํ๋ก ํธ ํ๋ก์ ํธ ์ต์ข
ํํฉ
- ํ๊ท๋์ ๋ฉ์ธํ์ด์ง, ๋์ ๋ฆฌ์คํธ ํ์ด์ง, ๋๊ถ๋์ ๋ํ
์ผ ํ์ด์ง
- ์ฐฝํ๋์ ๋ก๊ทธ์ธ, ํ์๊ฐ์
ํ๋ฏผ๋์ nav,footer
- TODAY I LEARN ERROR ๐ฆ
- fetch๋ฅผ 10๊ฐ์ฉ ๋์ด์ ๋ชจ๋ ๋ฟ๋ ธ์ ๋ ๋ง์ง๋ง ๋ก๋ฉ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ฆฌ์ง์ง ์๋ ์ค๋ฅ์ ๋ํด์
<script>
class ProductList extends Component {
constructor(props) {
super(props);
this.state = {
listData: [],
totalCountDataFetched: 10,
loading: false,
noData: false,
};
}
// ๋ฐ์ดํฐ๋ฅผ 10๊ฐ์ฉ ํ์น๋ฐ๋ ํจ์
fetchMoreData = async () => {
const LIST_API = '/data/ProductList/PRODUCT_LIST_DATA.json';
const { totalCountDataFetched, noData } = this.state;
fetch(LIST_API)
.then(res => {
return res.json();
})
.then(data => {
const duplicatedData = [...data.LIST_DATA.product];
const newDatalistData = duplicatedData.slice(0, totalCountDataFetched);
this.setState({
listData: newDatalistData,
});
if (this.state.listData.length === 50) {
this.setState({
noData: !noData,
});
return window.removeEventListener('scroll', this.handleScroll);
}
})
.catch(console.error);
};
</script>
- HOW TO FIX MY ERROR ๐
- ์์๋ฐฉํธ์ผ๋ก ๋ฐ์ดํฐ์ ์ด๊ฐฏ์, 50๊ฐ๊ฐ ๋์์ ๋ state๊ฐ noData์ true๋ก๋ง๋ฌ์ผ๋ก์ ๋ง์ง๋ง ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์กฐ์น๋ฅผ ํด๋์์.
- ๋ฉํ ๋๊ป ์ฌ์ญค๋ณด๋ ์ค์ ๋ก๋ ๋ฒก์๋์์ ํ๋ก ํธ๊ฐ ์์ฒญํ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค ๊ฒ์ด๊ณ ์ด๋ฅผ ๋ฒก์๋์ ๊ณผ์ ์์ด ์งํํ๊ฒ๋๋ค๋ฉด json ๋ชฉ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋ 10๊ฐ์ฉ ์๋ผ์ ๋ณด๋ด๋ ๊ฒ์ผ๋ก ๊ตฌํํ ์ ์๋ค๊ณ ํ์ฌ
- ERROR๋ฅผ ํด๊ฒฐํ
setstate์ ์ธ์ prep๐
this.setState(prev => ({...prev, listData: newDatalistData, currentState: prev.currentState + 1, totalState: data.totalCount,}));
๋ก ์ด์ state๊ฐ๋ค์ prep... ์คํ๋ ๋๋ก ๋ฐ์์ ์ ์ฅํ ์ ์๋ค.
- currentState, ์ ์ฒด ํ์ด์ง๋ค์ด์
์, ์ฆ ๋์ ๊ฒฝ์ฐ ๋ก๋ฉ์ ๋ช๋ฒํ ๊ฑด์ง์ totalState, ์ ์ฒด ์ํ ๊ฐฏ์๋ฅผ ๋ฐฑ์๋๋ก๋ถํฐ ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ค
fetch(LIST_API + this.state.currentState + '.json')
์ฒ๋ผ json ๋ชฉ๋ฐ์ดํฐ๋ฅผ 5๊ฐ๋ก ๋๋ ์ fetch ๋ฐ์์ฌ ์ ์๋ค.
3.this.state.currentState === data.totalCount
๋ฒก์๋์์ ๋ฐ์์จ ์๊ฐ ์ผ์นํ์ ๋ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฉ์ถฐ์ค์ผํ๊ณ componentWillUnmount ๋ฉ์๋๋ก ์ด๋ฒคํธ ์ทจ์๊น์ง ํด์ฃผ๋ฉด ๋๋ค.
- ์์ ๋ ์ฝ๋
<script>
class ProductList extends Component {
constructor(props) {
super(props);
this.state = {
listData: [],
totalCountDataFetched: 10,
loading: false,
currentState: 1,
totalState: 1,
};
}
componentDidMount() {
this.fetchMoreData();
return window.addEventListener('scroll', this.handleScroll);
}
componentWillUnmount() {
// ์ด๋ฒคํธ ๋ฆฌ์ค๋์์ ์ญ์
window.removeEventListener('scroll', this.handleScroll);
}
fetchMoreData = async () => {
const LIST_API = '/data/ProductList/PRODUCT_LIST_DATA_'
const { totalCountDataFetched } = this.state;
fetch(LIST_API + this.state.currentState + '.json')
.then(res => {
return res.json();
})
.then(data => {
const duplicatedData = [...data.LIST_DATA.product];
const newDatalistData = duplicatedData.slice(0, totalCountDataFetched);
if (this.state.currentState === data.totalCount) {
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ญ์
}
this.setState(prev => ({
...prev,
listData: newDatalistData,
currentState: prev.currentState + 1,
totalState: data.totalCount,
}));
})
.catch(console.error);
};
</script>
- ๋ชจ๋ฅด๋ ์
- ๋ง๋ ์์
๋ฌผ๋ค์ ํ๋๋ก mergeํ๋ ๊ณผ์ ์ ๋ํด์
comnponentdidupdata๐
, componentWillUnmount๐
๋ฌดํ ์คํฌ๋กค์ด ํ์ด์ง ๋์์๋ ์ฌ๋ผ์ง๋๋ก ํ๊ธฐ ์ํด์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ๋ด๋ถ์ ์คํฌ๋กค์ ๋ฉ์ถ๋ ์กฐ๊ฑด์ ๊ฑธ์ด์ผํ๋ค๋ ๊ฒ์ ๋ํด์
- ๋ฐฐ์ด์
- ํ์๋ค๊ณผ ํ ์์ผ๋ถํฐ~๋ชฉ์์ผ๊น์ง ์์
ํ ํ๋ก ํธ์๋ ๊ณผ์ ์ mergeํ๋ ๊ณผ์ ์ ๊ฒฝํํ์์
- mergeํ๋ ๊ณผ์ ์์ conflict๊ฐ ๋ฐ์ํ๊ณ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋ค์ mergeํ์ฌ ์ต์ข
์ ์ผ๋ก ๋ชจ๋ ํ์ด์ง๋ฅผ main ๋ธ๋์น์ ํฉ์น ์ ์์์
- merge ํ๊ธฐ ์ ๋ฆฌ๋ทฐ 2๊ฐ ์น์ธ ๋ฐ๊ณ git merge๋ฒํผ ๋๋ฅด๊ธฐ
- ํ์ ํ ๋ช
์ด ๋ณธ์ธ์ ๋ธ๋์น๋ฅผ mergeํ์ผ๋ฉด ๋ค๋ฅธ ํ์์ด ์์ ์ ์์
๋ธ๋์น,feature์์ mergeํ main ๋ธ๋์น git pull ๋ฐ๊ณ conflict ํด๊ฒฐํ๊ธฐ
- conflict ํด๊ฒฐ๋๋ฉด ๋ค์ git add์ commit ๋จ๊ธฐ๊ณ pushํ๊ธฐ
- ์ด ๊ณผ์ ์ ๋ชจ๋ ๋ง์ณ ๋ง์ง๋ง ํ์์ด ์ต์ข
์ ์ผ๋ก mergeํ์ฌ ์์
๋ฌผ ํฉ์น๊ธฐ
- ์ํ ์ ๊ณผ ๊ฐ์ ํ ์
- ์ง์์ค์๋ง์ ์ผ์ฃผ์ผ๊ฐ์ ํผ๋ก๋ฅผ ์ํด ๋ฐ๋ก ์ ์ ๊ณผ ์ผ์ฐ ์ผ์ด๋ ์ ์ ์ํ ๊ฒ๊ฐ๋ค~
- ํ์๋ค๊ณผ ํจ๊ป ํ๋ฉด์ ํ๋ก ํธ์๋ ๋ถ๋ถ์ ๋ฆฌํฉํ ๋ง๊ณผ ์์ ์ ๋ ํ ์ ์๋ ์๊ฐ์ด ์์์๋ ์ด์ฌํ ์ง์คํ์ง ์์ ๊ฒ ๋ฐ์ฑํ์!
- ๋ชฉํ์ ๋ง๊ฐ๊ธฐํ: 2021-10-09
- ๋ฐฑ์๋ ๋ชจ๋ธ๋ง ๋ฐ ํ๋ฆฌ์ฆ๋ง ํต์ผ ํ์ ์งํ
- ๋ฒก์๋ ์๋ฒ ์์ฑ ๋ฐ ๋ ์ด์ด๋ ํจํด ์ ์
- ๋ฒก์๋ ๊ด๋ จ ๊ฐ์ 2๊ฐ ๋ฃ๊ธฐ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Day 78(52)์ผ์ฐจ WE_MOTIVATION_DIARY), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค
https://velog.io/@minj9_6/Day์ผ์ฐจ-WEMOTIVATIONDIARY
์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์
๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
- ๋ด๊ฐ ๋ง๋ ํ์ด์ง : ๋ฆฌ์คํธ ํ์ด์ง
- ๊ธฐ๋ฅ ๊ตฌํ :
- ์ ํ ํธ๋ฒ์ ์ํ ๋ํ ์ผ ์ฐ์ 4๋ฒ ๋ณ๊ฒฝ,
- ์์๋ณ ์ ํ ์ฌ์ง ๋ณ๊ฒฝ
- ๋ฌดํ ์คํฌ๋กค ๋ฐ ๋ก๋ฉ ํํ
- ๋ฐ์ํ ์ํ ๊ฐฏ์๋ฅผ 5๊ฐ์์ 2๊ฐ๋ก
- ํ๋จ์ gototopbutton๊ณผ top์ผ๋ก ๊ฐ๋ฅ ๊ธฐ๋ฅ ๊ตฌํ
- gototopbutton์ ๋ฒํผ์ ํ์ด๋ผ์ดํธ ๊ธฐ๋ฅ
- ํ๊ท๋์ ๋ฉ์ธํ์ด์ง, ๋์ ๋ฆฌ์คํธ ํ์ด์ง, ๋๊ถ๋์ ๋ํ ์ผ ํ์ด์ง
- ์ฐฝํ๋์ ๋ก๊ทธ์ธ, ํ์๊ฐ์ ํ๋ฏผ๋์ nav,footer
- TODAY I LEARN ERROR ๐ฆ
- fetch๋ฅผ 10๊ฐ์ฉ ๋์ด์ ๋ชจ๋ ๋ฟ๋ ธ์ ๋ ๋ง์ง๋ง ๋ก๋ฉ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ฆฌ์ง์ง ์๋ ์ค๋ฅ์ ๋ํด์
<script> class ProductList extends Component { constructor(props) { super(props); this.state = { listData: [], totalCountDataFetched: 10, loading: false, noData: false, }; } // ๋ฐ์ดํฐ๋ฅผ 10๊ฐ์ฉ ํ์น๋ฐ๋ ํจ์ fetchMoreData = async () => { const LIST_API = '/data/ProductList/PRODUCT_LIST_DATA.json'; const { totalCountDataFetched, noData } = this.state; fetch(LIST_API) .then(res => { return res.json(); }) .then(data => { const duplicatedData = [...data.LIST_DATA.product]; const newDatalistData = duplicatedData.slice(0, totalCountDataFetched); this.setState({ listData: newDatalistData, }); if (this.state.listData.length === 50) { this.setState({ noData: !noData, }); return window.removeEventListener('scroll', this.handleScroll); } }) .catch(console.error); }; </script>
- HOW TO FIX MY ERROR ๐
- ์์๋ฐฉํธ์ผ๋ก ๋ฐ์ดํฐ์ ์ด๊ฐฏ์, 50๊ฐ๊ฐ ๋์์ ๋ state๊ฐ noData์ true๋ก๋ง๋ฌ์ผ๋ก์ ๋ง์ง๋ง ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์กฐ์น๋ฅผ ํด๋์์.
- ๋ฉํ ๋๊ป ์ฌ์ญค๋ณด๋ ์ค์ ๋ก๋ ๋ฒก์๋์์ ํ๋ก ํธ๊ฐ ์์ฒญํ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค ๊ฒ์ด๊ณ ์ด๋ฅผ ๋ฒก์๋์ ๊ณผ์ ์์ด ์งํํ๊ฒ๋๋ค๋ฉด json ๋ชฉ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋ 10๊ฐ์ฉ ์๋ผ์ ๋ณด๋ด๋ ๊ฒ์ผ๋ก ๊ตฌํํ ์ ์๋ค๊ณ ํ์ฌ
- ERROR๋ฅผ ํด๊ฒฐํ
setstate์ ์ธ์ prep๐
this.setState(prev => ({...prev, listData: newDatalistData, currentState: prev.currentState + 1, totalState: data.totalCount,}));
๋ก ์ด์ state๊ฐ๋ค์ prep... ์คํ๋ ๋๋ก ๋ฐ์์ ์ ์ฅํ ์ ์๋ค.- currentState, ์ ์ฒด ํ์ด์ง๋ค์ด์ ์, ์ฆ ๋์ ๊ฒฝ์ฐ ๋ก๋ฉ์ ๋ช๋ฒํ ๊ฑด์ง์ totalState, ์ ์ฒด ์ํ ๊ฐฏ์๋ฅผ ๋ฐฑ์๋๋ก๋ถํฐ ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ค
fetch(LIST_API + this.state.currentState + '.json')
์ฒ๋ผ json ๋ชฉ๋ฐ์ดํฐ๋ฅผ 5๊ฐ๋ก ๋๋ ์ fetch ๋ฐ์์ฌ ์ ์๋ค.
3.this.state.currentState === data.totalCount
๋ฒก์๋์์ ๋ฐ์์จ ์๊ฐ ์ผ์นํ์ ๋ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฉ์ถฐ์ค์ผํ๊ณ componentWillUnmount ๋ฉ์๋๋ก ์ด๋ฒคํธ ์ทจ์๊น์ง ํด์ฃผ๋ฉด ๋๋ค.
- ์์ ๋ ์ฝ๋
<script> class ProductList extends Component { constructor(props) { super(props); this.state = { listData: [], totalCountDataFetched: 10, loading: false, currentState: 1, totalState: 1, }; } componentDidMount() { this.fetchMoreData(); return window.addEventListener('scroll', this.handleScroll); } componentWillUnmount() { // ์ด๋ฒคํธ ๋ฆฌ์ค๋์์ ์ญ์ window.removeEventListener('scroll', this.handleScroll); } fetchMoreData = async () => { const LIST_API = '/data/ProductList/PRODUCT_LIST_DATA_' const { totalCountDataFetched } = this.state; fetch(LIST_API + this.state.currentState + '.json') .then(res => { return res.json(); }) .then(data => { const duplicatedData = [...data.LIST_DATA.product]; const newDatalistData = duplicatedData.slice(0, totalCountDataFetched); if (this.state.currentState === data.totalCount) { // ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ญ์ } this.setState(prev => ({ ...prev, listData: newDatalistData, currentState: prev.currentState + 1, totalState: data.totalCount, })); }) .catch(console.error); }; </script>
- ๋ชจ๋ฅด๋ ์
- ๋ง๋ ์์ ๋ฌผ๋ค์ ํ๋๋ก mergeํ๋ ๊ณผ์ ์ ๋ํด์
comnponentdidupdata๐
,componentWillUnmount๐
๋ฌดํ ์คํฌ๋กค์ด ํ์ด์ง ๋์์๋ ์ฌ๋ผ์ง๋๋ก ํ๊ธฐ ์ํด์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ๋ด๋ถ์ ์คํฌ๋กค์ ๋ฉ์ถ๋ ์กฐ๊ฑด์ ๊ฑธ์ด์ผํ๋ค๋ ๊ฒ์ ๋ํด์
- ๋ฐฐ์ด์
- ํ์๋ค๊ณผ ํ ์์ผ๋ถํฐ~๋ชฉ์์ผ๊น์ง ์์ ํ ํ๋ก ํธ์๋ ๊ณผ์ ์ mergeํ๋ ๊ณผ์ ์ ๊ฒฝํํ์์
- mergeํ๋ ๊ณผ์ ์์ conflict๊ฐ ๋ฐ์ํ๊ณ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋ค์ mergeํ์ฌ ์ต์ข ์ ์ผ๋ก ๋ชจ๋ ํ์ด์ง๋ฅผ main ๋ธ๋์น์ ํฉ์น ์ ์์์
- merge ํ๊ธฐ ์ ๋ฆฌ๋ทฐ 2๊ฐ ์น์ธ ๋ฐ๊ณ git merge๋ฒํผ ๋๋ฅด๊ธฐ
- ํ์ ํ ๋ช ์ด ๋ณธ์ธ์ ๋ธ๋์น๋ฅผ mergeํ์ผ๋ฉด ๋ค๋ฅธ ํ์์ด ์์ ์ ์์ ๋ธ๋์น,feature์์ mergeํ main ๋ธ๋์น git pull ๋ฐ๊ณ conflict ํด๊ฒฐํ๊ธฐ
- conflict ํด๊ฒฐ๋๋ฉด ๋ค์ git add์ commit ๋จ๊ธฐ๊ณ pushํ๊ธฐ
- ์ด ๊ณผ์ ์ ๋ชจ๋ ๋ง์ณ ๋ง์ง๋ง ํ์์ด ์ต์ข ์ ์ผ๋ก mergeํ์ฌ ์์ ๋ฌผ ํฉ์น๊ธฐ
- ์ํ ์ ๊ณผ ๊ฐ์ ํ ์
- ์ง์์ค์๋ง์ ์ผ์ฃผ์ผ๊ฐ์ ํผ๋ก๋ฅผ ์ํด ๋ฐ๋ก ์ ์ ๊ณผ ์ผ์ฐ ์ผ์ด๋ ์ ์ ์ํ ๊ฒ๊ฐ๋ค~
- ํ์๋ค๊ณผ ํจ๊ป ํ๋ฉด์ ํ๋ก ํธ์๋ ๋ถ๋ถ์ ๋ฆฌํฉํ ๋ง๊ณผ ์์ ์ ๋ ํ ์ ์๋ ์๊ฐ์ด ์์์๋ ์ด์ฌํ ์ง์คํ์ง ์์ ๊ฒ ๋ฐ์ฑํ์!
- ๋ชฉํ์ ๋ง๊ฐ๊ธฐํ: 2021-10-09
- ๋ฐฑ์๋ ๋ชจ๋ธ๋ง ๋ฐ ํ๋ฆฌ์ฆ๋ง ํต์ผ ํ์ ์งํ
- ๋ฒก์๋ ์๋ฒ ์์ฑ ๋ฐ ๋ ์ด์ด๋ ํจํด ์ ์
- ๋ฒก์๋ ๊ด๋ จ ๊ฐ์ 2๊ฐ ๋ฃ๊ธฐ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Day 78(52)์ผ์ฐจ WE_MOTIVATION_DIARY), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@minj9_6/Day์ผ์ฐจ-WEMOTIVATIONDIARY์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค