이 컴포넌트는 Props로 받아온 name 값을 사용해 Material 아이콘을 보여줍니다. 아이콘 색상은 color Props로 설정되며, 이 값이 비어있으면 기본값으로 보라색(#6200ee)을 사용합니다. 이 컴포넌트의 스타일을 보면 marginRight의 값을 -8로 설정했습니다. 이렇게 음수 값으로 설정해주면 우측에 8dp만큼 여백이 생기는 게 아니라, 8dp만큼 컴포넌트가 이동하게 됩니다. 만약 이 값을 설정하지 않으면 헤더의 기본 패딩 때문에 컴포넌트가 우측에서 너무 많이 떨어져 있는 현상이 나타납니다.

    이 컴포넌트를 포스트 작성 화면 헤더의 우측에 보여주는 방법은 두 가지가 있습니다. 하나는 RootStack에서 화면 설정을 통한 방법, 또 하나는 UploadScreen에서 navigation.setOptions로 설정하는 방법입니다. 우리는 이 버튼을 눌렀을 때 UploadScreen에 있는 상태를 사용해야 하니, 두 번째 방법으로 구현해주겠습니다.

    screens/UploadScreen.js

    import React, {useEffect, useRef, useState, useCallback} from 'react';
    import {
      StyleSheet,
      TextInput,
      View,
      useWindowDimensions,
      Keyboard,
      Animated,
    } from 'react-native';
    import {useNavigation, useRoute} from '@react-navigation/native';
    import IconRightButton from '../components/IconRightButton';
    
    function UploadScreen() {
      (...)
      const navigation = useNavigation();
      const onSubmit = useCallback(() => {
        // TODO: 포스트 작성 로직 구현
      }, []);
      (...)
      useEffect(() => {
        navigation.setOptions({
          headerRight: () => <IconRightButton onPress={onSubmit} name="send" />,
        });
      }, [navigation, onSubmit]);
    
      return (
        <View style={styles.block}>
          <Animated.Image
            source={{uri: res.assets[0]?.uri}}
            style={[styles.image, {height: animation}]}
            resizeMode="cover"
          />
          <TextInput
            style={styles.input}
            multiline={true}
            placeholder=" 사진에 대한 설명을 입력하세요..."
            textAlignVertical="top"
            value={description}
            onChangeText={setDescription}
          />
        </View>
      );
    }
    
    (...)
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.