반응형
💡구현 목표
- 커스텀 공통 네비게이션헤더 컴포넌트를 생성하고 각 화면에서 타이틀, 아이콘이 다르게 렌더링되도록 하기
자식 컴포넌트로 아래 인자들을 prop로 전달하고
오른쪽 아이콘을 렌더링시킬지, 왼쪽 아이콘을 렌더링 시킬지 혹은 둘다 렌더링 시킬지 아래와 같이 조건문으로 분기 처리
전체 소스
import React from "react";
import {View, TouchableOpacity, StyleSheet} from "react-native";
import {useNavigation} from "@react-navigation/native";
import Icon from "react-native-vector-icons/Ionicons"
import { defaultFontText as Text } from "../components/Text";
const NavigationHeader = ({title, leftIcon, leftIconName, rightIcon,rightIconName, rightIconName2, onPressLeft, onPressRight, onPressRight2}) => {
const navigation = useNavigation();
if(leftIcon && rightIcon){
return (
<View style={styles.container}>
{(navigation) ?
(<View style={styles.leftContainer}>
<TouchableOpacity onPress={onPressLeft}>
<Icon name={leftIconName} size={24}/>
</TouchableOpacity>
</View> ) : null
}
<Text style={styles.middleContainer}>{title}</Text>
{(navigation) ?
(<View style={styles.rightContainer}>
<TouchableOpacity onPress={onPressRight}>
<Icon name={rightIconName} style={styles.rightIcon} size={24}/>
</TouchableOpacity>
<TouchableOpacity onPress={onPressRight2}>
<Icon name={rightIconName2} style={styles.rightIcon} size={24}/>
</TouchableOpacity>
</View> ) :null
}
</View>
)
}else if(leftIcon) {
return (
<View style={styles.container}>
{(navigation) ?
(<View style={styles.leftContainer}>
<TouchableOpacity onPress={onPressLeft}>
<Icon name={leftIconName} size={24}/>
</TouchableOpacity>
</View> ) : null
}
<Text style={styles.middleContainer}>{title}</Text>
</View>
)
}else if(rightIcon){
return (
<View style={styles.container}>
<Text style={styles.middleContainer}>{title}</Text>
{(navigation) ?
(<View style={styles.rightContainer}>
<TouchableOpacity onPress={onPressRight} >
<Icon name={rightIconName} style={styles.rightIcon} size={24}/>
</TouchableOpacity>
<TouchableOpacity onPress={onPressRight2}>
<Icon name={rightIconName2} style={styles.rightIcon} size={24}/>
</TouchableOpacity>
</View> ) : null
}
</View>
)
} else {
return (
<View style={styles.container}>
<Text style={styles.title}>{title}</Text>
</View>
);
}
}
const styles = StyleSheet.create({
--스타일 코드 생략
});
export default NavigationHeader;
각 화면에 네비게이션 헤더 적용한 모습
반응형
'💻 my code archive > ✨React-Native' 카테고리의 다른 글
[RN 프로젝트] #8 리액트네이티브 + 스프링부트(Spring Boot) + JWT 카카오 소셜 로그인 구현 (1) | 2023.08.24 |
---|---|
[RN 프로젝트] #7 리액트네이티브 fetch + KOPIS 공연 API 가져오기, XML to JSON (React-native-xml2js) (0) | 2023.08.20 |
[RN 프로젝트] #5 FlatList 사용법, 마이페이지 화면 만들기 (0) | 2023.01.29 |
[RN 프로젝트] #4 리액트 네이티브 커스텀 폰트 적용 방법 (0) | 2023.01.29 |
[RN 프로젝트] #3 리액트 네이티브 이미지 슬라이더 react-native-image-slider-box 구현 방법 (0) | 2022.10.31 |