๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

[React Native] 02. ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋ณธ ๋‹ค์ง€๊ธฐ -1 ๋ณธ๋ฌธ

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[React Native] 02. ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋ณธ ๋‹ค์ง€๊ธฐ -1

adorableco 2023. 8. 2. 06:24
๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 02-1 ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ž‘๋™ ์›๋ฆฌ / 02-2 JSX ๊ตฌ๋ฌธ ํƒ๊ตฌํ•˜๊ธฐ ํŒŒํŠธ๋ฅผ ๊ณต๋ถ€ํ•ด๋ด…๋‹ˆ๋‹ค ... 


 

1. ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

npx react-native init ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ช… --template react-native-template-typescript

 

2. npm start

โ€ป ์ด๋•Œ ์•Œ๋งž์€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ npm start๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /Users/parkseyeon/React-Native/package.json
npm ERR! errno -2
npm ERR! enoent Could not read package.json: Error: ENOENT: no such file or directory, open '/Users/parkseyeon/React-Native/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์œ„์น˜ํ•ด ์žˆ๋‹ค๋ฉด ๋ช…๋ น์–ด cd ๋ฅผ ์ด์šฉํ•ด ์˜ฌ๋ฐ”๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ๋’ค์— npm start ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

3. ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ์‹œ โžก๏ธ npm run android / ios ๊ฐœ๋ฐœ ์‹œ โžก๏ธ npm rum ios

โ€ป npm ์„ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•ด์•ผ ํ•จ

 

 


๋ฌผ๋ฆฌ DOM ๊ณผ ๊ฐ€์ƒ DOM

DOM : Document Object Model

๋ฌผ๋ฆฌ DOM ๊ตฌ์กฐ : ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์‹ค์ œ DOM ๊ตฌ์กฐ

๊ฐ€์ƒ DOM ๊ตฌ์กฐ : ๋ฆฌ์•กํ„ฐ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ๊ตฌ์กฐ

 

๊ฐ€์ƒ DOM ๊ตฌ์กฐ โžก๏ธ ๋ฌผ๋ฆฌ DOM ๊ตฌ์กฐ : ๋ฆฌ์•กํŠธ๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ

 

๋ธŒ๋ฆฌ์ง€ ๋ฐฉ์‹ ๋ Œ๋”๋ง

UI ์Šค๋ ˆ๋“œ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ชฝ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉ”์‹œ์ง€ ํ ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋ง๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹

โœ… UI ์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฐ˜์‘์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ชฝ ์Šค๋ ˆ๋“œ์— ์ด๋ฒคํŠธ ํ˜•ํƒœ๋กœ ๋„˜๊น€

 

JavaScriptCore (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„) ๋™์ž‘ โœ… C++ ์–ธ์–ด๋กœ ๊ตฌํ˜„๋จ

โžก๏ธ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” JNI(Java Native Interface) ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ

โžก๏ธ iOS์—์„œ๋Š” FFI(Foreign Functioin Interface) ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ

 

๋ฌผ๋ฆฌ DOM ๊ฐ์ฒด ์ƒ์„ฑ (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ)

const pElement = document.createElement('p')
pElement.innerText = 'Hello JavaScript world!'

 

๊ฐ€์ƒ DOM ๊ฐ์ฒด ์ƒ์„ฑ (๋ฆฌ์•กํŠธ ํ”„๋ ˆ์ž„์›Œํฌ/ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์ƒ DOM ๊ฐ์ฒด ์ƒ์„ฑ)

const pElement = React.createElement('p', null, 'Hello React world!')

์ด ๊ฐ€์ƒ DOM ๊ฐ์ฒด๋ฅผ ๋ฌผ๋ฆฌ DOM ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋ ค๋ฉด

import ReactDOM from 'react-dom'

ReactDOM.render(pElement, document.body)

 

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๋ Œ๋”๋Ÿฌ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ

export default function App(){
	const textElement = React.createElement(Text, null 'Hello world!')
    return textElement
}

 

 

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น

npm i : package.json ํŒŒ์ผ์— ๋ช…์‹œ๋œ ํŒจํ‚ค์ง€๋ฅผ node_modules ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์„ค์น˜

npx pod-install : pod ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ์›๊ฒฉ์ง€ ์ €์žฅ์†Œ์—์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›์Œ

npm start : ๋ฉ”ํŠธ๋กœ ์„œ๋ฒ„ ์‹คํ–‰ (์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ์„ค์น˜๋œ ์•ฑ์ด ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ๋ฉ”ํŠธ๋กœ ์„œ๋ฒ„์—์„œ ES5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋‚ด๋ ค๋ฐ›์•„์•ผํ•˜๋ฏ€๋กœ

 

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ๋ช…๋ น

cd android

./gradlew clean : ./gradew installDebug ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ๋œ ์ž„์‹œ ํŒŒ์ผ์„ ์ง€์›€

rm -rf .gradle (๋งฅ) : ๋นŒ๋“œํ•œ ์•ฑ ์‚ญ์ œ

cd ios

xcodebuild clean : Xcode๊ฐ€ ์ƒ์„ฑํ•œ ์ž„์‹œ ํŒŒ์ผ ์ง€์›€

pod deintegrate : npx pod-install ๋ช…๋ น์œผ๋กœ ๋‚ด๋ ค๋ฐ›์€ ํŒจํ‚ค์ง€๋ฅผ ์ง€์›€

 

์ฝ”๋“œ ๋””๋ฒ„๊น…

App.tsx ํŒŒ์ผ์—์„œ console.log() ์‚ฌ์šฉ

 


JSX = JavaScript + XML

JSX ๊ตฌ๋ฌธ์ด ์žˆ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ํ™•์žฅ์ž๊ฐ€ .tsx ์—ฌ์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ import ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.

import React from 'react'

โœ… JSX ์ฝ”๋“œ ์•ˆ์—์„œ๋Š” ์‹คํ–‰๋ฌธ(ex. if๋ฌธ) ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ํ‘œํ˜„์‹๋งŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

โžก๏ธ if ๋ฌธ์„ JSX ๋ฌธ ๋ฐ”๊นฅ์— ๋‘๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

โžก๏ธ if ๋ฌธ์„ ๋‹จ์ถ• ํ‰๊ฐ€ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค. ex) {isLoading && <Text>Loading...</Text>}

โžก๏ธ JSX ๋ฌธ์„ ๋ณ€์ˆ˜์— ๋‹ด์•„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.  ๐Ÿ”Ž ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ JSX ๋ฌธ์„ ๋‹ด์„ ์ˆ˜๋„ ์žˆ์Œ

 

โœ… ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ JSX ๋ฌธ์„ ๋‹ด์„ ๋•Œ๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

export default functioin App(){
	const children = [
    	<Text>Hello world!</Text>
        <Text>Hello world!</Text>
        <Text>Hello world!</Text>
    ]
    return children <- ๋ถˆ๊ฐ€๋Šฅ!!
    return {children} <- ๋ถˆ๊ฐ€๋Šฅ!!
    return <SafeAreaView>{children}</SafeAreaView> <- ๊ฐ€๋Šฅ!!

โœ… JSX ์ฝ”๋“œ ๋‚ด์˜ ๋ชจ๋“  ์ค„์€ React.createElement ํ˜ธ์ถœ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•