Hello Ocean! ๐ŸŒผ

[nodejs-react]Server-Client ํ†ต์‹  ์‹œ ๋ฌดํ•œ ํ˜ธ์ถœ ํ•ด๊ฒฐ ๋ณธ๋ฌธ

Web

[nodejs-react]Server-Client ํ†ต์‹  ์‹œ ๋ฌดํ•œ ํ˜ธ์ถœ ํ•ด๊ฒฐ

bba_dda 2021. 3. 1. 14:59
๋ฐ˜์‘ํ˜•

๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ :

client๊ฐ€ ํŽ˜์ด์ง€์— ์ ‘์†ํ–ˆ์„ ๋•Œ, server๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ (initial data) 

 

์ฝ”๋“œ:

server.js ์ผ๋ถ€ 

app.use('/api', (req, res)=> 
    mdbConn.getToDoList()
    .then((rows) => {
        console.log("in server.js",rows);
        res.json({initialTodos:rows});
    })
    .catch((errMsg) => {
        console.log(errMsg);
    })
);

 

App.js ์ผ๋ถ€ (client)

function App() {
  const [state, setState] = useState({
    //username: null
    initalList: null
  });
  useEffect(() => {
    fetch('http://localhost:3002/api')
    .then(res=>res.json())
    .then(data=>setState({initalList:data.initialTodos}));
  });
  
 console.log(state.initalList);
  const _todos = state.initalList;
  return (
    <div>
      {`data from server ${_todos}`}
    </div>
    
.....

 

๋ฌธ์ œ1 :

client๊ฐ€ server์— ๊ณ„์† ์‰ฌ์ง€ ์•Š๊ณ  ์–ด์ฉŒ๋ฉด ๋ฌดํ•œ์œผ๋กœ.. data๋ฅผ ์š”์ฒญํ•ด์„œ ๊ณ„์† ๋ฐ›์•„์˜ด.. 

 

๋ฌธ์ œ์˜ ์›์ธ :

useEffect()๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. 

 

ํ•ด๊ฒฐ : 

useEffect๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋„ฃ์–ด์ค€ ๊ฐ’๋“ค์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ effect hook์ด ํ˜ธ์ถœ๋œ๋‹ค. 

๋‘ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ์ƒ๋žตํ–ˆ์„ ๋•Œ, ๋ณ€๊ฒฝ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์„œ ๋ฌดํ•œ์œผ๋กœ ํ˜ธ์ถœํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋นˆ ๋ฐฐ์—ด[]์„ ๋„ฃ์–ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ, ์ตœ์ดˆ 1ํšŒ๋งŒ effect hook์ด ํ˜ธ์ถœ๋˜๋„๋ก ํ–ˆ๋‹ค. 

 

์ฐธ๊ณ ์ž๋ฃŒ: 

boxfoxs.tistory.com/395

 

React - Functional Component์˜ ์žฅ์ , Hook

React 16.8 ๋ฒ„์ „๋ถ€ํ„ฐ FC - Functional Component(ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ)์— State๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” Hooks ๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์Šค์Šค๋กœ Hooks ๋Š” ๋ณ„๋กœ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ์ง€๋งŒ, React ๊ฐœ๋ฐœ์ž

boxfoxs.tistory.com

 

๋ฌธ์ œ2:

ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์ „์—, ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ, 

useEffect()๋กœ๋Š” componentWillMount()๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.. 

 

ํ•ด๊ฒฐ :

showing ์ด๋ผ๋Š” state๋ฅผ ์ด์šฉํ•ด์„œ, useEffect()ํ›„์— ์˜๋„ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ด๋„๋ก ํ–ˆ๋‹ค.

ํŽ˜์ด์ง€๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋  ๋•Œ๋Š” ๋กœ๋”ฉ์ค‘ ํŽ˜์ด์ง€ ์ด์šฉ

codingbroker.tistory.com/74

 

[react] ์˜ฌ๋ฐ”๋ฅธ ๋ฆฌ์•กํŠธ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง (if/else ๊ตฌ๋ฌธ๊ณผ ternary operator,&& ์ฐจ์ด)

1. if / else ๊ตฌ๋ฌธ ์‚ฌ์šฉ showing state์— ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. import React, { useState } from "react"; import "./App.css"; function App() { const [showing, setShowi..

codingbroker.tistory.com

......

function App() {
	const [showing, setShowing] = useState(false);
  	const [state, setState] = useState({
		//username: null
		initalList: [{
			id: 1,
			text: '๊ฐ€์งœ๊ฐ’',
			done: true
		}]
  });
  	useEffect(() => {
		console.log('start useEffect');
		fetch('http://localhost:3002/api').then(res=>res.json()).then(data=>{
		setState({initalList:data.initialTodos});
		setShowing(true)
    });
  },[]); //๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์–ด ๋ฐ˜๋ณต ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก.. 

	console.log("App state:",state.initalList);

  if (showing){
	return (
		<TodoProvider initalTodos={state.initalList}>
		  <GlobalStyle/>
		  <WrapAll>
				<TodoChangeDate info="left">
				</TodoChangeDate>
				<TodoTemplate>
					<TodoHead></TodoHead>
					<TodoList></TodoList>
					<TodoCreate></TodoCreate>
				</TodoTemplate>
				<TodoChangeDate info="right">
				</TodoChangeDate>
			</WrapAll>
		</TodoProvider>
	  );
  }
  else {
	  //๋กœ๋“œ์ค‘ ํŽ˜์ด์ง€ ๋‚˜์ค‘์— ๊พธ๋ฏธ๊ธฐ 
	  return(
		<div>
			ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œ ์ค‘์ž…๋‹ˆ๋‹ค 
		</div>
	  );
  }
  
......
๋ฐ˜์‘ํ˜•