리액트 네이티브 정리

Shortdary·2020년 4월 29일
1

* 아키텍쳐 변화

리액트 네이티브 아키텍쳐 변화 요약 그림
기존의 RN은 브릿지를 통해 비동기 json 메세지를 주고 받았다. 속도적으로나 성능적으로 더 나은 개편안으로 변화를 시도하고 있다.

  • 정적 타입 checker (flow / typescript)를 코드에 넣는 것에 몰두 중이다.
    CodeGen이라는 툴을 만드는 중이다. (자바스크립트 / 네이티브 코드 호환을 자동화)

  • JSI를 이용해서 자바스크립트가 C++ 호스트 객체들을 참조하거나 그들을 대상으로 함수를 실행할 수 있다.
    -> 기존 JS영역과 Native언어간의 통신은 비동기 json 메세지를 보내는 것이었음.
    이제는 두 영역이 서로를 잘 인지하고 json 메세지를 보내기 위해 serialize (JSON.strigify / JSON.parse) 할 일도 없다. 브릿지 섹션의 혼잡 요소를 모두 제거합니다.

  • Fabric, Turbo Modules
    브릿지 쪽 변화 요약 그림

    Shadow Tree : UI가 어떻게 보여지고 동작하는가 => Fabric
    Native Modules: 네이티브 사이드 관리 => Turbo Modules
    이 사이를 비동기 json 메세지로 관리하는 방식

    Fabric은 UI가 그려지는 단계들을 줄이고 Shadow Tree를 C++로 직접 생성하여 속도를 향상시킴.
    JSI를 사용하여 UI 작업들을 자바스크립트 함수로써 노출시킨다. 따라서 Shadow Tree가 js 영역과 native 영역 모두에 공유되고 양쪽 모두 직접적 상호작용이 가능하다.
    이는 UI를 자바스크립트가 직접 컨트롤을 가능하게 하여 UI 작업들도 동기적 수행들에 참여할 수 있게 되 었다.

    기존의 방식은 모든 모듈들은 앱이 시작될 때 initialized 되어야 했다.
    Turbo Modules는 js를 통해 모듈이 필요할 때만 불러오고 직통 reference를 유지한다.
    이는 불필요한 json 메세지 소통을 없애고, 앱의 시작시간을 단축시킨다.

* 스타일링

const buttons = StyleSheet.create({
  disabled: {
    backgroundColor: colors.disabledCTAButton,
  },
  otpAuthRequest: {
    borderRadius: 4,
    backgroundColor: colors.apronGreen,
    justifyContent: 'center',
    textAlign: 'center',
    width: 70,
    height: 44,
  },
});
ReactRN
.disableddisabled
background-colorbackgroundColor
;,

그냥 JS 객체 다루듯이 다루면 된다.

* 플랫폼 특정 코드

Platform 이라는 모듈을 사용하여 나눌 수 있다.
Android | ios | native | default 가 있다.

Platform.select() 함수를 통해 스타일시트를 사용하거나
컴포넌트 지정을 해줄 수 있다.



파일을 저렇게 만들어 놓으면 (.ios / .android) 알아서 플랫폼에 따라 파일을 불러온다.



.native 파일을 쓸 수 있는데 web 은 일반 파일을 모바일은 .native 파일을 가져간다.

* 타입스크립트

  • 리액트도 정적 타입 checker를 리액트에 심어 넣으려고 노력중이다.
  • 자바스크립트 자체로는 타입에 대한 제한이 따로 없기 때문에 타입을 좀 더 strict하게 다룰 수 있는 언어이다.

타입스크립트 간단한예시

타입스크립트 참고할만한 사이트?
https://velog.io/@velopert/using-hooks-with-typescript
https://github.com/typescript-cheatsheets/react-typescript-cheatsheet

* 참조사이트

https://medium.com/react-native-seoul/%EC%83%88%EB%A1%9C%EC%9A%B4-react-native-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%EC%84%A4%EB%AA%85-a80a60ec04d7
리액트 네이티브 서울 아키텍쳐 설명 번역글
https://reactnative.dev/docs/getting-started
리액트 네이티브 공식문서

profile
흐엥

0개의 댓글