250x250
Rainbow๐ŸŒˆCoder
My dev Note๐Ÿ“’
Rainbow๐ŸŒˆCoder
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (411)
    • ๊ณต์ง€์‚ฌํ•ญ (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ • (3)
      • React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ (6)
      • next.js (2)
      • pixi.js (7)
    • ๋งˆํฌ์—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • ์ด๊ฒƒ์ด C#์ด๋‹ค (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(๊ธฐ์ดˆ) (8)
      • Unity(C#์ค‘๊ธ‰) (5)
      • ์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • ์Šคํ”„๋ง (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (15)
      • ์ž๋ฃŒ๊ตฌ์กฐ (5)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
    • ํ˜•์ƒ๊ด€๋ฆฌ (15)
      • Git (11)
      • ์†Œ์ŠคํŠธ๋ฆฌ (3)
    • ๊ทธ๋ž˜ํ”ฝ์Šค (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • ๋ฆฌ๋ˆ…์Šค (5)
      • ๋ฆฌ๋ˆ…์Šค (5)
    • ์ฑ… ๋ฆฌ๋ทฐ (13)
      • ํด๋ฆฐ์ฝ”๋“œ(์ฑ…๋ฆฌ๋ทฐ) (3)
      • ์œ ์ง€๋ณด์ˆ˜๊ฐ€๋Šฅํ•œ์ฝ”๋”ฉ์˜๊ธฐ์ˆ C#ํŽธ(์ฑ…๋ฆฌ๋ทฐ) (1)
      • ๋ฆฌํŒฉํ† ๋ง(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํŒ) (9)
    • Server (2)
      • ๊ฒŒ์ž„ ์„œ๋ฒ„(๋„คํŠธ์›Œํฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ,OS) (2)
    • ์„ค๊ณ„, ์•„ํ‚คํ…์ณ (4)
    • ํŒŒ์ด์ฌ (5)
    • ๋””์ž์ธํŒจํ„ด (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • ์ธ๊ณต์ง€๋Šฅ (1)
      • ํ˜ผ์ž๊ณต๋ถ€ํ•˜๋Š”๋จธ์‹ ๋Ÿฌ๋‹+๋”ฅ๋Ÿฌ๋‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์œ„์ž„
  • MySQL
  • ์ปดํฌ์ง€์…˜
  • ใ…ฃใ„ท

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Rainbow๐ŸŒˆCoder

My dev Note๐Ÿ“’

[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (5) react one-way data flow + ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ ๊ณ„์† making
Javascript/React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ

[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (5) react one-way data flow + ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ ๊ณ„์† making

2022. 12. 9. 15:20
728x90

ํฌ์ŠคํŒ… ์œ„์น˜ ๋„์‹œ๊ธฐ๋ฐ˜ ๋‚ ์”จ์•ฑ(4)์— ์ด์€ ๋งˆ๋ฌด๋ฆฌ ์ž‘์—…

 

App.js๊ฐ€ ๋ชจ๋“  ๋กœ์ง์„ ๋‹ค ๊ฐ–๊ณ  ์žˆ๊ณ , ์ปดํฌ๋„ŒํŠธ์— ๋ณด๋‚ด์ฃผ๋Š” ์‹์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด๋„๋ก ํ•œ๋‹ค.

react one-way data flow

๋•Œ๋ฌธ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ˜•์ œ๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค.

๋ฆฌ์•กํŠธ ํŠน์ง• one-way reactive data flow

https://tkssharma.gitbook.io/react-training/day-01/react-js-3-principles/one-way-data-

 

 

The foundation of understanding component relationships in React and parent component hierarchy…

Props stands for properties. It is an object that passes values and data from parent to the child component. These values can be strings…

sandienunez.medium.com

์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋Š” React ์ปดํฌ๋„ŒํŠธ ์ค‘ state ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ Stateful ์ปดํฌ๋„ŒํŠธ๋ผ ํ•˜๊ณ , state ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ Stateless ์ปดํฌ๋„ŒํŠธ ๋ผ ํ•œ๋‹ค. ๋งŒ์•ฝ state๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Stateless ์ปดํฌ๋„ŒํŠธ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ตœ๋Œ€ํ•œ state๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ๋ฒ„๊ทธ๋‚˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

 

์š”์•ฝ ์ •๋ฆฌ : react one-way data flow์— ๋”ฐ๋ผ, ๋ถ€๋ชจ์—์„œ ์ž‘์‹์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด

๋ฐ์ดํ„ฐ๋Š” ๋ถ€๋ชจ๊ฐ€ ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋Š” stateful, ๋ถ€๋ชจ๊ฐ€ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” stateless ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑํ•ด๋ฒ„๋ฆฌ๋ฉด 

state๊ฐ€ ์—†๋Š” stateless ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์›Œ์ง„๋‹ค. (๋ฐ์ดํ„ฐ ๊ฑฑ์ •์—†์ด ์œ ์ง€๋ณด์ˆ˜ ํ•ด๋„๋จ. ์ค‘์š” ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ stateful ์ปดํฌ๋„ŒํŠธ์— ์žˆ์Œ)


์ตœ๋Œ€ํ•œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ stateless๋กœ ๋งŒ๋“ค๊ณ  ๋ช‡๊ฐœ์˜ stateful์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์ด์ƒ์ 
import './App.css';
import { useEffect, useState } from 'react';
import WeatherBox from "./component/WaetherBox";
import WeatherButton from "./component/WeatherButton";
import 'bootstrap/dist/css/bootstrap.min.css';

//1. ์•ฑ์ด ์‹คํ–‰๋˜์ž๋งˆ์ž ํ˜„์žฌ ์œ„์น˜ ๊ธฐ๋ฐ˜์˜ ๋‚ ์”จ๊ฐ€ ๋ณด์ธ๋‹ค.
//2. ๋‚ ์”จ ์ •๋ณด์—๋Š” ๋„์‹œ, ์„ญ์”จ, ํ™”์”จ ๋‚ ์”จ ์ƒํƒœ
//3. 5๊ฐœ์˜ ๋ฒ„ํŠผ์ด ์žˆ๋‹ค (1๊ฐœ๋Š” ํ˜„์žฌ ์œ„์น˜, 4๊ฐœ๋Š” ๋‹ค๋ฅธ ๋„์‹œ)
//4. ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

function App() {
	const [userWeather, setUserWeather] = useState(null);
	const [city, setCity] = useEffect('');
	const cities = ['Your Weather', 'NewYork', 'Toronto', 'Paris', 'Rondon'];

	const getCurrentLocation = () => {
		if (navigator.geolocation) {
			navigator.geolocation.getCurrentPosition((position) => {
				const latitude = position.coords.latitude;
				const longitude = position.coords.longitude;
				getWeatherByCurrentLocation(latitude, longitude);
			});
		} else {
			alert("Geolocation is not supported by this browser.");
		}
	}

	//await ์“ฐ๊ณ ์ž ํ•˜๋Š” ํ•จ์ˆ˜๋Š” async ์—ฌ์•ผ ํ•œ๋‹ค! 
	const getWeatherByCurrentLocation = async (lat, lon) => {
		let url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=b13282392fd34dd9436686c7c7ecda83&units=metric`;
		let response = await fetch(url) //๋น„๋™๊ธฐ(์ง๋…: url์„ patchํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ ค๋‹ฌ๋ผ!) : url ๋กœ๋”ฉํ•œ ๋’ค ์‘๋‹ต๊ฐ’์„ ๋ฐ›๊ธฐ๋กœ ํ•จ
		let data = await response.json(); //์‘๋‹ต์—์„œ json ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ ค๋‹ฌ๋ผ
		setUserWeather(data);
		console.log(data);
	}

	useEffect(() => {
		getCurrentLocation()
	}, []);

	return (
		<div>
			<div className='main'>
				<WeatherBox weather={userWeather} />
				<WeatherButton cities={cities} setCity={setCity} /> 
			</div>
			<div>
			</div>
		</div >
	);
}

export default App;

 

<WeatherButton cities={cities} setCity={setCity} /> 
setCity๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•จ์ˆ˜๋„ ๋ณด๋‚ด์ค„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

	useEffect(() => {
		console.log('city', city);
	}, [city]);

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ-useEffect

ํŒ

React์˜ class ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์— ์นœ์ˆ™ํ•˜๋‹ค๋ฉด, useEffect Hook์„ componentDidMount์™€ componentDidUpdate, componentWillUnmount๊ฐ€ ํ•ฉ์ณ์ง„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋กœ๋”ฉ์Šคํ”ผ๋„ˆ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋‚ ์”จ์›น ๋งŒ๋“ค๊ธฐ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ๋‹ค.

 

 

 

728x90

'Javascript > React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (6) npm ๋ฆฌ์•กํŠธ ๋กœ๋”ฉ์Šคํ”ผ๋„ˆ + ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ ์™„์„ฑ  (0) 2022.12.10
[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (4) ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ (api ์—ฐ๊ฒฐ ๊ธฐ์ดˆ์ž‘์—…, UI์ž‘์—… )  (1) 2022.12.07
[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (3) ๋ฆฌ์•กํŠธ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ, ๋ผ์ดํ”„ ์‚ฌ์ดํด  (0) 2022.12.05
[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (2) ๋ฆฌ์•กํŠธ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒŒ์ž„  (0) 2022.12.04
[React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (1) ๋ฆฌ์•กํŠธ์˜ ์ปจ์…‰ state  (0) 2022.12.02
    'Javascript/React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (6) npm ๋ฆฌ์•กํŠธ ๋กœ๋”ฉ์Šคํ”ผ๋„ˆ + ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ ์™„์„ฑ
    • [React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (4) ์œ„์น˜ ๋„์‹œ ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์•ฑ (api ์—ฐ๊ฒฐ ๊ธฐ์ดˆ์ž‘์—…, UI์ž‘์—… )
    • [React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (3) ๋ฆฌ์•กํŠธ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ, ๋ผ์ดํ”„ ์‚ฌ์ดํด
    • [React + Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ] (2) ๋ฆฌ์•กํŠธ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒŒ์ž„
    Rainbow๐ŸŒˆCoder
    Rainbow๐ŸŒˆCoder
    ๋ชฐ๋ผ๋„ ๊ฒฐ๊ตญ์€ ์•„๋Š” ๊ฐœ๋ฐœ์ž, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•œ ๋งค์ผ์˜ ํ•œ๊ฑธ์Œ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”