📱테스트 환경
"react": "18.2.0"
"react-native": "0.74.2"
React Native 는 로컬에 있는 svg 파일을 바로 불러올 수 없다고 한다 .. ( 특이하네 .. )아무튼 로컬에 있는 이미지를 사용하려면 모듈을 설치해서 사용해야 한다고 하는데방법은 다음과 같다.
yarn add react-native-svg
모듈 설치 후 (IOS) pod install 도 해주고 ~
yarn add --dev react-native-svg-transformer
추가적으로 transformer 모듈도 설치해주면 import 할 수 있게 된다.
마지막으로 추가적은 프로젝트 설정이 필요한데
metro.config.js 파일 생성 ( 있다면 수정 )
const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
const defaultConfig = getDefaultConfig(__dirname);
const {assetExts, sourceExts} = defaultConfig.resolver;
/**
* Metro configuration
* https://facebook.github.io/metro/docs/configuration
*
* @type {import('metro-config').MetroConfig}
*/
const config = {
transformer: {
babelTransformerPath: require.resolve('react-native-svg-transformer'),
},
resolver: {
assetExts: assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
},
};
module.exports = mergeConfig(defaultConfig, config);
나는 ts (Typescript) 를 사용중이라서 추가적으로 declarations.d.ts 파일 생성 ( 있다면 수정 )
declare module '*.svg' {
import React from 'react';
import {SvgProps} from 'react-native-svg';
const content: React.FC<SvgProps>;
export default content;
}
여기까지 설정해주고 나면 사용준비는 끝났다.
나는 네비게이션 탭에 사용할 이미지를 만드려고 헀던 거였어서
하단의 코드는 내가 앱 개발하면서 실제로 사용한 코드이다.
ㅇㅣ렇게 해놓으면 담에 내가 또 어플 만들때 이대로 가져다쓰기위함이다.
// icon.tsx
import React from 'react';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
import Loan from '../assets/img/loan.svg';
import LoanActive from '../assets/img/loan_active.svg';
import Score from '../assets/img/score.svg';
import ScoreActive from '../assets/img/score_active.svg';
export const CalcIcon = ({
focused,
color,
}: {
focused: boolean;
color: string;
}) => {
const iconName = focused
? 'calculator-variant'
: 'calculator-variant-outline';
return <MaterialCommunityIcons name={iconName} color={color} size={26} />;
};
export const LoanIcon = ({
focused,
color,
}: {
focused: boolean;
color: string;
}) => {
return focused ? <LoanActive width={'29'} height={'29'} /> : <Loan />;
};
export const ScoreIcon = ({
focused,
color,
}: {
focused: boolean;
color: string;
}) => {
return focused ? <ScoreActive /> : <Score />;
};
export const HomeTab = () => {
return (
<Tab.Navigator
screenOptions={{
tabBarStyle: {backgroundColor: 'black'},
tabBarActiveTintColor: 'white',
tabBarInactiveTintColor: 'white',
headerShown: false,
}}>
<Tab.Screen
name={RouteNames.JOB}
component={JobCalcScreen}
options={{tabBarLabel: '알바비', tabBarIcon: CalcIcon}}
/>
<Tab.Screen
name={RouteNames.LOAN}
component={LoanCalcScreen}
options={{tabBarLabel: '대출이자', tabBarIcon: LoanIcon}}
/>
<Tab.Screen
name={RouteNames.SCORE}
component={ScoreCalcScreen}
options={{tabBarLabel: '학접이자', tabBarIcon: ScoreIcon}}
/>
</Tab.Navigator>
);
};
'Javascript > React-Native' 카테고리의 다른 글
[RN] React Native Admob 설치 (2) | 2024.09.24 |
---|---|
[RN] IOS Simulator Error (1) | 2024.09.09 |
[RN] could not move temporary workspace 에러 (0) | 2024.07.31 |
[RN] 기본 스플래시 화면 비활성화 & 커스텀 스플래시 화면 사용 (2) | 2024.07.23 |
[RN] 프로젝트 생성하기 (0) | 2024.07.08 |