반응형

목표

React 자체 기능만을 사용하여 글로벌 상태를 사용해보자.

 

도입

보통 React 프로젝트를 진행하면서 글로벌 상태를 사용하고 관리하기 위해 Redux 라이브러리를 많이 사용합니다만, 소규모 애플리케이션에서는 Redux를 도입하는게 공수적인 측면에서 손해일 수도 있겠다는 생각이 들어 다른 방법을 찾아보게 되었습니다.

 

React Context 공식 설명

context를 이용하면 단계마다 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 제공할 수 있습니다.

 

API

1. React.createContext

const MyContext = React.createContext(defaultValue);

2. Context.Provider

<MyContext.Provider value={/* 어떤 값 */}>

 

3. Class.contextType

class MyClass extends React.Component {
  componentDidMount() {
    let value = this.context;
    /* MyContext의 값을 이용한 코드 */
  }
  componentDidUpdate() {
    let value = this.context;
    /* ... */
  }
  componentWillUnmount() {
    let value = this.context;
    /* ... */
  }
  render() {
    let value = this.context;
    /* ... */
  }
}
MyClass.contextType = MyContext;

 

4. Context.Consumer

<MyContext.Consumer>
  {value => /* context 값을 이용한 렌더링 */}
</MyContext.Consumer>

 

실제 사용해보기

Context를 생성합니다.

생성한 Context를 다른 컴포넌트에서 가져올 수 있게 export해 줍니다.

//App.js
export const UserContext = React.createContext(null);

 

Provider컴포넌트를 사용합니다.

//App.js
render() {
	return (
		<UserContext.Provider value="contextValue">
			// Context를 구독하는 컴포넌트들을 이 안에서 불러줍니다.
			// 이 안의 컴포넌트들은 이제 context의 변화를 알 수 있습니다.
			// Provider가 context의 변화를 알리는 역할을 합니다.
		</UserContext.Provider>
	)
}

 

하위 컴포넌트에서 Context Consumer를 통해 context에 value를 사용할 수 있습니다.

import { UserContext } from '../../../../../App'; // export한 UserContext를 불러옵니다.


class FooComponent extends React.Component {
	render() {    
		return (
			<UserContext.Consumer>
				{value =>
					<Text>value</Text>
				}
			</UserContext.Consumer>
		)
	}
}

 

 

참고 : https://ko.reactjs.org/docs/context.html

반응형
반응형

개발 중에 PropTypes이 적용되지 않는 경우가 있어서

PropTypes 사용 방법을 찾아서 정리하였습니다.

 

`prop-types` 라이브러리가 설치되어 있어야 합니다.

prop-types 라이브러리 설치 방법 

npm install prop-types

 

 

동작하지 않던 코드 (Babel Transform 미사용 시)

→ 정확히 얘기하면 Babel Transform(transform-class-properties 등)을 사용하고 있는 경우에만 React 컴포넌트 클래스 내의 정적프로퍼티로 선언 가능 (React 공식 문서 참고)

 

 

동작하는 코드 

Class Component, Function Component 별로 PropTypes 및 DefaultProps 를 지정하는 샘플 코드를 작성하였습니다.

 

1. Class Component 사용 시

2. Function Component 사용 시

 

 

공식 문서 : https://ko.reactjs.org/docs/typechecking-with-proptypes.html#default-prop-values

반응형
반응형

ReactNative 프로젝트 진행 중 ios에 프로젝트 실행 시 아래와 같은 에러가 발생하였습니다.

 

Build system information
error: Multiple commands produce '/Users/gona/Library/Developer/Xcode/DerivedData/RealTodo-aucqhojomouxbdfdfxrtrszfoppj/Build/Products/Debug-iphonesimulator/RealToDo.app/Zocial.ttf':
1) Target 'RealToDo' (project 'RealTodo') has copy command from '/Users/gona/Development/00.HanaMana/RealToDo/node_modules/react-native-vector-icons/Fonts/Zocial.ttf' to '/Users/gona/Library/Developer/Xcode/DerivedData/RealTodo-aucqhojomouxbdfdfxrtrszfoppj/Build/Products/Debug-iphonesimulator/RealToDo.app/Zocial.ttf'
2) That command depends on command in Target 'RealToDo' (project 'RealTodo'): script phase “[CP] Copy Pods Resources”

...

 

원인은 'react-native-vector-icons'를 사용할 때 'Copy Bundle Resources'에 폰트가 중복으로 들어가게 되서 발생하는 문제였습니다.

 

해결 방법은 아래와 같습니다.

 

1. Xcode 실행 후 프로젝트 선택합니다.

 

2. 탭 메뉴 중 'Build Phases'를 선택합니다.

 

3. 'Copy Bundle Resources' 항목에서 중복되는 리소스들을 제거합니다.

 

 

4. 다시 'npx react-native run-ios'를 실행합니다.

 

 

 

참고

inthetechpit.com/tag/react-native-vector-icons/

 

react-native-vector-icons – InTheTechPit

I had earlier installed react-native-vector-icons in my Project and used the below command to link it: react-native link The “multiple commands produce” error seems is caused by the new autolinking feature in React Native 0.60 or above – the line use

inthetechpit.com

 

반응형
반응형

Xcode 실행 시 응답이 없는 경우가 발생하였습니다.

저 같은 경우 인터넷에서 여러가지 방법을 찾아보다가 해결이 안되어서 

결국 Xcode 버전을 12.2로 재설치하여 해결하였습니다.

 

재설치하는 방법

1. 설치되어 있던 XCode를 삭제합니다.

2. developer.apple.com/download/more/ 방문하여 XCode 12.2를 다운로드 합니다.

3. 다운 받은 'Xcode_12.2.xip' 파일을 실행하여 Xcode 12.2를 설치합니다.

 

12.2 설치 후에는 Xcode가 정상적으로 실행되었습니다.

 

반응형
반응형

Firestore를 사용하여 개발 중에 아래와 같은 에러가 발생하였습니다.

에러에 대해 알아보니, firestore를 사용할 때 복합 색인이 필요한 query를 실행할 경우 발생하는 에러였습니다.

예를 들면, 등록(=) 및 범위 연산자(<=, >=, <, >)가 결합된 query인 경우 복합 색인을 사용한다고 합니다.

 

 

그래서 복합 색인을 만드는 방법에 대해 공유하고자 합니다.

 

복합 색인을 만드는 방법은 2가지가 있습니다.

1. firestore console에서 복합 색인 만드는 방법.

해당 방법의 경우 사용자가 컬렉션 ID, 필드를 직접 입력해야 합니다.

 

 

2. Query 실행 후 나타난 에러 메시지에 표시된 링크로 복합 색인 만드는 방법.

해당 방법의 경우 필요한 값이 자동 입력이 되어 1번 방법보다 간편하다는 장점이 있습니다.

 

 

 

 

복합 색인에 대해 더 자세한 내용은 아래 공식 문서에서 확인하실 수 있습니다.

복합 색인 관련 공식 문서 페이지

 

 

반응형
반응형

Cloud Firestore 적용하기

Cloud Firestore란?

Firebase 및 Google Cloud Platform의 모바일, 웹, 서버 개발에 사용되는 유연하고 확장 가능한 데이터베이스입니다.

 

주요기능

  • 유연성
  • 표현형 쿼리
  • 실시간 업데이트
  • 오프라인 지원
  • 확장형 설계

시작하기

Cloud Firestore 데이터베이스 만들기

1. Firebase 프로젝트를 만들지 않았다면 Firebase Console에서 프로젝트 추가를 클릭한 후 화면의 아낸에 따라 Firebase 프로젝트를 만듭니다.(firebase.google.com/)

2. Firebase Console에서 Firebase 프로젝트를 선택하고 Cloud Firestore 메뉴를 선택합니다.

3. 데이터베이스 만들기를 선택하고 진행합니다.

보안 규칙

- 프로덕션 모드 : 보안 규칙에 데이터 읽기/쓰기가 가능합니다. (기본 : 데이터 비공개)

- 테스트 모드 : 개발용으로 데이터가 공개되어있습니다. (오직 개발용으로 사용해야 합니다)

 

위치 설정

 - 이 위치 설정은 프로젝트의 기본 GCP(Google Cloud Platform) 리소스 위치입니다.

 - 경고 : 프로젝트의 기본 GCP 리소스 위치를 설정한 후에는 변경할 수 없습니다.

 - asia-east2 선택함.

 

공식문서에도 자세하게 설명되어 있으니 참고 부탁드립니다.

firebase.google.com/docs/firestore/quickstart?hl=ko

 

Cloud Firestore 시작하기  |  Firebase

이 빠른 시작에서는 Cloud Firestore를 설정하고 데이터를 추가한 후 Firebase Console에서 방금 추가한 데이터를 확인하는 방법을 볼 수 있습니다. Cloud Firestore 데이터베이스 만들기 Firebase 프로젝트를

firebase.google.com

 

 

다음 편에서는 개발 환경 설정을 진행해보겠습니다.

반응형
반응형

앱에서 화면을 이동하기 위해 Drawer 네비게이션을 사용하는 방법을 알아보겠습니다.

 

※ 구현하기 위해 사용한 라이브러리에서 Drawer navigation이라고 표현하고 있습니다만,

화면 마다 용어의 차이가 있을 수 있습니다. 저는 Side Navigation Bar라는 용어가 더 이해하기 쉬울 것 같네요.

 

 

그럼 시작해보겠습니다.

 

1. 사전 준비

필요한 라이브러리를 설치합니다.

npm install @react-navigation/native

1-1. Expo로 프로젝트를 구성하셨다면 아래 명령어를 입력해주세요.

expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view

1-2. React Native로 프로젝트를 구성하셨다면 아래 명령어를 입력해주세요.

npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

 

2. 이제 '@react-navigation/drawer' 라이브러리를 설치합니다.

npm install @react-navigation/drawer

 

3. App.js 파일에 코드를 구현합니다.

필요한 라이브러리를 import하고 

<NavigationContainer> - <Drawer.Navigator> - <Drawer.Screen> 순으로 네비게이션에 필요한 코드를 작성합니다.

그리고 <Drawer.Screen>에 메뉴에 보여질 화면을 지정해줍니다.

 

아래 샘플 코드에서는 HomeScreen, Sample1, Sample2 화면을 구현하였습니다.

HomeScreen은 같은 파일에 작성하였고, Sample1, 2는 파일을 분리하였습니다.

실제 앱을 구현하실 때는 Sample1, 2처럼 분리해서 작성하시는 걸 권장합니다.

 

 

 

4. 실행 화면

 

5. 더욱 자세한 라이브러리 내용 및 사용법을 확인하고 싶으시면 아래 라이브러리 문서를 참고하시기 바랍니다.

reactnavigation.org/docs/drawer-based-navigation

반응형
반응형

ReactNative 개발 환경 설정을 진행할 때 사용하는 방법은 2가지가 있습니다.

  1. Expo CLI Quickstart
  2. React Native CLI Quickstart

이번에는 Expo CLI Quickstart를 사용하기 위한 개발 설정을 설명해보겠습니다.

 

우선 필요한 프로그램을 설치합니다.

1. Node를 설치합니다.

 - 12 LTS 버전 이상 설치 필요.

 

2. 'expo-cli'를 npm을 사용해서 설치합니다.

 - 전역 설치(-g)로 설치합니다.

npm install -g expo-cli

expo-cli 전역 설치 명령어 실행 화면
expo-cli 전역 설치 완료 화면

 

3. expo 명령어를 사용하여 React Native 프로젝트를 생성합니다.

expo init AwesomeProject

cd AwesomeProject
npm start # you can also use: expo start

 

4. 프로젝트 생성 후 'npm start'로 프로젝트를 실행합니다.

npm start로 프로젝트 실행한 화면

5. 실행된 화면을 확인합니다.

실행 화면 ( http://localhost:19002/ )

 

 

❗ 설정 중 예외상황

- 윈도우 터미널 1.0에서 실행 시 아래와 같은 에러 발생, 일반 cmd 창에서 실행 시 정상 동작 함.

 

반응형

+ Recent posts