더북(TheBook)

9.6.2 사용자에게 수정 및 삭제 물어보기

이번에는 사용자에게 수정할 것인지 삭제할 것인지 물어보는 기능을 구현해봅시다. 이 기능을 구현할 때는 PostCard 컴포넌트에 ActionSheetIOSActionSheetModal에서 사용할 상태와 함수들을 준비하고, 이를 PostCard.js 파일에 작성하면 됩니다. 단, 이렇게 하면 PostCard 컴포넌트의 코드가 너무 길어져서 나중에 코드를 다시 읽을 때 헷갈릴 수 있습니다.

따라서 usePostActions라는 커스텀 Hook 함수를 만들고, 그 내부에 필요한 상태와 함수들을 구현하겠습니다. hooks 디렉터리에 usePostActions.js 파일을 생성해 다음과 같이 작성해주세요.

hooks/usePostActions.js

import {useState} from 'react';
import {ActionSheetIOS, Platform} from 'react-native';

export default function usePostActions() {
  const [isSelecting, setIsSelecting] = useState(false);

  const edit = () => {
    console.log('TODO: edit');
  };
  const remove = () => {
    console.log('TODO: remove');
  };

  const onPressMore = () => {
    if (Platform.OS === 'android') {
      setIsSelecting(true);
    } else {
      ActionSheetIOS.showActionSheetWithOptions(
        {
          options: ['설명 수정', '게시물 삭제', '취소'],
          destructiveButtonIndex: 1,
          cancelButtonIndex: 2,
        },
        (buttonIndex) => {
          if (buttonIndex === 0) {
            edit();
          } else if (buttonIndex === 1) {
            remove();
          }
        },
      );
    }
  };

  const actions = [
    {
      icon: 'edit',
      text: '설명 수정',
      onPress: edit,
    },
    {
      icon: 'delete',
      text: '게시물 삭제',
      onPress: remove,
    },
  ];

  const onClose = () => {
      setIsSelecting(false);
  };

  return {
    isSelecting,
    onPressMore,
    onClose,
    actions,
  };
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.