173만명의 커뮤니티!! 함께 토론해봐요.
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
안녕하세요, 3-0 공통컴포넌트 다시보고있는데요 커스텀버튼의경우 라지가 width 100% height 44로 지정했는데 핸드폰 디바이스마다 전체 길이가 다를텐데 dip기준으로 적용되는지 궁금합니다 또한 실무에서도 flexBox로 만들어서 flex 사이즈를 지정하는게 아닌 대부분 width , height로 지정하나요? 폰트사이즈의경우도 휴대폰 시스템에서 텍스트 크기를 키우니까 UI가 깨져버리는데 실무에서는 어떤식으로 진행하는지 궁금합니다
react-native typescript expo react-hook-form react-query
나마스테
2026-08-09T14:17:12.144Z
댓글 2
좋아요 0
조회수 53
해결됨
아바타 커뮤니티앱 만들기 (React Native Expo)
❗ 질문 작성시 꼭 참고해주세요 에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다. 질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github 을 첨부해주세요. 개발중인 OS, ReactNative, Node 버전 등의 개발환경 을 알려주셔야합니다. 에러메세지는 일부분이 아닌 전체 상황 을 올려주세요. 일부만 보여주시면 답변이 어렵습니다. 에러 잘라서 올리시면 안됩니다! (에러 일부만 자르거나 일부만 복사하지말아주세요) eas 빌드가 엄청 오래걸려서 검색해보니 몇시간 걸릴수도 있다고 해서.. eas build --platform android --local 로컬 빌드를 하라고 하던데 로컬 빌드 할려면 설정이 필요한가요?
react-native typescript expo react-hook-form react-query
심재화
2026-05-27T17:15:18.571Z
댓글 2
좋아요 0
조회수 121
해결됨
아바타 커뮤니티앱 만들기 (React Native Expo)
비밀번호 입력 후 수정 시 상태 보존 이슈 secureTextEntry 설정을 하면 비밀번호를 입력 후 재 입력할 때 비밀번호 상태가 보존되지 못 하고 다시 입력해야 하는데 이게 원래 이런걸까요?
react-native typescript expo react-hook-form react-query
김형근
2026-03-17T09:02:03.135Z
댓글 2
좋아요 0
조회수 117
해결됨
아바타 커뮤니티앱 만들기 (React Native Expo)
안녕하세요, expo 공식 홈페이지에서 version 55를 사용하게 명시되어있어서 55로 시작했더니 이제 tabs 폴더 구조가 따로 없는 형태로 되었는데 그냥 똑같이 tabs를 생성하여서 진행해야하나요?
react-native typescript expo react-hook-form react-query
나마스테
2026-03-15T10:25:25.424Z
댓글 2
좋아요 0
조회수 165
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
안녕하세요! 클라이언트 부분 열심히 반복 수강 중에 있습니다 🙂 코드가 굉장히 깔끔하고 가독성이 좋아서 서버 부분도 배우고 싶더라구요! 서버 구성과 효율적인 코드를 작성하는 법도 배우고 싶다는 마음이 커지더라구요! 혹시 추후에 서버 강의를 진행하실 예정이 없으실까요? 없으시다면,,, 기존 강의에 있던 맛집 어플 서버 부분만 참고해도 충분할까요...?
react-native typescript expo react-hook-form react-query
Kim Da Bin
2026-01-29T08:33:24.517Z
댓글 1
좋아요 1
조회수 138
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
node 버전 : v24.11.1 [id.tsx] 파일입니다. 현재 상세 페이지를 가면 아래와 같이 댓글 버튼이 상단으로 올라오는 현상이 생겼습니다. 또한 답글 남기기를 눌러도 focus는 댓글 input으로 되지만, 화면처럼 스크롤이 내려가는 현상은 안나타납니다. npx expo start를 이용하여, 실기기로 테스트한겁니다! import AuthRoute from "@/components/AuthRoute"; import CommentItem from "@/components/CommentItem"; import FeedItem from "@/components/FeedItem"; import InputField from "@/components/InputField"; import { colors } from "@/constants"; import useCreateComment from "@/hooks/queries/useCreateComment"; import useGetPost from "@/hooks/queries/useGetPost"; import useKeyboard from "@/hooks/useKeyboard"; import { useLocalSearchParams } from "expo-router"; import { Fragment, useRef, useState } from "react"; import { Keyboard, KeyboardAvoidingView, Platform, Pressable, ScrollView, StyleSheet, Text, TextInput, View, } from "react-native"; import { SafeAreaView, useSafeAreaInsets, } from "react-native-safe-area-context"; export default function PostDetailScreen() { const { id } = useLocalSearchParams(); const { data: post, isPending, isError } = useGetPost(Number(id)); const createComment = useCreateComment(); const [content, setContent] = useState(""); const scrollRef = useRef<ScrollView | null>(null); const inputRef = useRef<TextInput | null>(null); const [parentCommentId, setParentCommentId] = useState<number | null>(null); const { isKeyboardVisible } = useKeyboard(); const insets = useSafeAreaInsets(); if (isPending || isError) { return <></>; } const handleReply = (commentId: number) => { setParentCommentId(commentId); inputRef.current?.focus(); }; const handleCancelReply = () => { setParentCommentId(null); Keyboard.dismiss(); }; const handleSubmitComment = () => { const commentData = { postId: post.id, content: content, }; if (parentCommentId) { createComment.mutate({ ...commentData, parentCommentId }); setContent(""); handleCancelReply(); return; } if (parentCommentId) { createComment.mutate({ ...commentData, parentCommentId }); setContent(""); handleCancelReply(); return; } createComment.mutate(commentData); setContent(""); setTimeout(() => { scrollRef.current?.scrollToEnd(); }, 500); }; return ( <AuthRoute> <SafeAreaView style={styles.container} edges={["right", "left", "bottom"]} > <KeyboardAvoidingView contentContainerStyle={styles.awareScrollViewContainer} behavior="height" keyboardVerticalOffset={ Platform.OS === "ios" || isKeyboardVisible ? 100 : insets.bottom } > <ScrollView ref={scrollRef} style={{ marginBottom: 75 }} contentContainerStyle={styles.scrollViewContainer} > <View style={{ marginTop: 12 }}> <FeedItem post={post} isDetail /> <Text style={styles.commentCount}> 댓글 {post.commentCount}개 </Text> </View> {post.comments?.map((comment) => ( <Fragment key={comment.id}> <CommentItem parentCommentId={parentCommentId} onReply={() => handleReply(comment.id)} onCancelReply={handleCancelReply} comment={comment} /> {comment.replies.map((reply) => ( <CommentItem key={reply.id} comment={reply} isReply /> ))} </Fragment> ))} </ScrollView> <View style={styles.commentInputContainer}> <InputField ref={inputRef} value={content} returnKeyType="send" onSubmitEditing={handleSubmitComment} onChangeText={(text) => setContent(text)} placeholder={ parentCommentId ? "답글 남기는중..." : "댓글을 남겨보세요." } rightChild={ <Pressable disabled={!content} style={styles.inputButtonContainer} onPress={handleSubmitComment} > <Text style={styles.inputButtonText}>등록</Text> </Pressable> } /> </View> </KeyboardAvoidingView> </SafeAreaView> </AuthRoute> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.WHITE, }, awareScrollViewContainer: { flex: 1, backgroundColor: colors.GRAY_200, }, scrollViewContainer: { backgroundColor: colors.GRAY_200, }, commentCount: { marginTop: 12, backgroundColor: colors.WHITE, paddingVertical: 12, paddingHorizontal: 16, fontSize: 16, fontWeight: "bold", }, commentInputContainer: { width: "100%", borderTopColor: colors.GRAY_200, borderTopWidth: StyleSheet.hairlineWidth, backgroundColor: colors.WHITE, padding: 16, bottom: 0, position: "absolute", }, inputButtonContainer: { backgroundColor: colors.ORANGE_600, padding: 8, borderRadius: 5, }, inputButtonText: { color: colors.WHITE, fontWeight: "bold", }, });
react-native typescript expo react-hook-form react-query
2026-01-12T07:09:35.460Z
댓글 1
좋아요 0
조회수 129
해결됨
아바타 커뮤니티앱 만들기 (React Native Expo)
아바타 만들기 /post 에는 글쓰기, 수정, 상세화면에 대한 정의가 되어 있습니다. /post/[id].tsx /post/write.tsx /post/update/[id].tsx 글쓰기와 수정은 SafeAreaView를 적용하지 않았는데 상세보기에서 적용한 이유와 어떤 기준에 의해 적용하였는지 문의 드립니다. /post/_layout.tsx 내에 Stack.Screen에서 headerShown : false일때 SafeAreaView를 적용하는걸로 생각했는데 그렇지 않은것 같습니다. 감사합니다.
react-native typescript expo react-hook-form react-query
컴공과
2026-01-09T14:41:30.968Z
댓글 2
좋아요 0
조회수 115
해결됨
아바타 커뮤니티앱 만들기 (React Native Expo)
피그마 디자인에서는 < 를 사용했는데 강의에서는 Foundation "home"을 사용했어요! 의도하신걸까요? 디자인이 최종 시안이라던가.. 그게 아니라면 강의는 동영상이니 바꾸는데 공수가 많이 들어가니 피그마에서 아이콘 바꿔주셔도 좋을것같습니다! 잡담으로 저는 자바스프링 백엔드로 시작해서 jQuery/Angular/Vue/React/Next를 풀스택으로 쓰는 회사들로 이직하면서 최종적으로 코틀린스프링을 메인스택으로 하고 있는데요. 취미/공부/사이드 프로젝트로 Next.js랑 Flutter 배우고 이번에 RN배우는데 강사님의 코드퀄리티나 강의력이 깔끔한것 같아서 잘 보고 있습니다ㅎㅎ 25년 초에 릴리즈한 강의인데 26년에도 미션이나 질문에도 답 잘 달아주셔서 감사합니다.
react-native typescript expo react-hook-form react-query
보키
2026-01-09T01:04:45.357Z
댓글 2
좋아요 0
조회수 89
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
❗ 질문 작성시 꼭 참고해주세요 에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다. 질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github 을 첨부해주세요. 개발중인 OS, ReactNative, Node 버전 등의 개발환경 을 알려주셔야합니다. 에러메세지는 일부분이 아닌 전체 상황 을 올려주세요. 일부만 보여주시면 답변이 어렵습니다. 에러 잘라서 올리시면 안됩니다! (에러 일부만 자르거나 일부만 복사하지말아주세요) 지금은 잘 되는 것 같은데(제가 아직 안드로이드 애뮬레이터로만 테스트 한 상태이긴 하지만) 혹시 지금도 안되는지 궁금합니다!
react-native typescript expo react-hook-form react-query
하윤
2026-01-04T06:06:38.483Z
댓글 2
좋아요 0
조회수 108
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
ellipsis-vertical 클릭시 강의와 같이 실제 아이폰 actionsheet 처럼 보이지 않고 다른 style이 입혀진듯하게 보이고있습니다. 에러코드는 없습니다. 노드 : 20.19.6 시뮬레이터 : iOS 26.2 ReactNative : 0.81.5 작업중인 시뮬레이터 화면 강의 시뮬레이터 화면 import { colors } from "@/constants"; import useAuth from "@/hooks/queries/useAuth"; import type { Post } from "@/types"; import { useActionSheet } from "@expo/react-native-action-sheet"; import { Ionicons, MaterialCommunityIcons, Octicons } from "@expo/vector-icons"; import React from "react"; import { Pressable, StyleSheet, Text, View } from "react-native"; import Profile from "./Profile"; interface FeedItemProps { post: Post; } function FeedItem({ post }: FeedItemProps) { const { auth } = useAuth(); const likeUsers = post.likes?.map((like) => Number(like.userId)); const isLiked = likeUsers?.includes(Number(auth.id)); const { showActionSheetWithOptions } = useActionSheet(); const handlePressOption = () => { const options = ["삭제", "수정", "취소"]; showActionSheetWithOptions({ options }, (selectedIndex?: number) => { console.log("selectedIndex", selectedIndex); switch (selectedIndex) { case 0: //삭제 break; case 1: //수정 break; case 2: break; default: break; } }); }; return ( <View style={styles.container}> <View style={styles.contentContainer}> <Profile imageUri={post.author.imageUri} nickname={post.author.nickname} createdAt={post.createdAt} onPress={() => {}} option={ auth.id === post.author.id && ( <Ionicons name="ellipsis-vertical" size={24} color={colors.BLACK} onPress={handlePressOption} /> ) } /> <Text style={styles.title}>{post.title}</Text> {/* numberOfLines 게시글 내용 3줄까지만 보이게 */} <Text numberOfLines={3} style={styles.description}> {post.description} </Text> </View> <View style={styles.menuContainer}> <Pressable style={styles.menu}> <Octicons name={isLiked ? "heart-fill" : "heart"} size={16} color={isLiked ? colors.ORANGE_600 : colors.BLACK} /> <Text style={isLiked ? styles.activeMenuText : styles.menuText}> {post.likes.length || "좋아요"} </Text> </Pressable> <Pressable style={styles.menu}> <MaterialCommunityIcons name="comment-processing-outline" size={16} color={colors.BLACK} /> <Text style={styles.menuText}>{post.commentCount || "댓글"}</Text> </Pressable> <Pressable style={styles.menu}> <Ionicons name="eye-outline" size={16} color={colors.BLACK} /> <Text style={styles.menuText}>{post.viewCount}</Text> </Pressable> </View> </View> ); } const styles = StyleSheet.create({ container: { backgroundColor: colors.WHITE, }, contentContainer: { padding: 16, }, menuContainer: { flexDirection: "row", alignItems: "center", justifyContent: "space-around", borderTopColor: colors.GRAY_300, borderTopWidth: StyleSheet.hairlineWidth, }, title: { fontSize: 18, color: colors.BLACK, fontWeight: "600", marginVertical: 8, }, description: { fontSize: 16, color: colors.BLACK, marginBottom: 14, }, menu: { flexDirection: "row", alignItems: "center", justifyContent: "center", paddingVertical: 16, width: "33%", gap: 4, }, menuText: { fontSize: 14, color: colors.GRAY_700, }, activeMenuText: { fontWeight: "500", color: colors.ORANGE_600, }, }); export default FeedItem; import queryClient from "@/api/queryClient"; import useAuth from "@/hooks/queries/useAuth"; import { ActionSheetProvider } from "@expo/react-native-action-sheet"; import { QueryClientProvider } from "@tanstack/react-query"; import { Stack } from "expo-router"; import { useEffect } from "react"; import "react-native-reanimated"; import Toast from "react-native-toast-message"; export const unstable_settings = { anchor: "(tabs)", }; export default function RootLayout() { return ( <ActionSheetProvider> <QueryClientProvider client={queryClient}> <RootNavigator /> <Toast /> </QueryClientProvider> </ActionSheetProvider> ); } function RootNavigator() { const { auth } = useAuth(); useEffect(() => { auth.id && Toast.show({ type: "success", text1: `${auth.nickname ?? "회원"}님 환영합니다!`, }); }, [auth.id]); return ( <Stack> <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> <Stack.Screen name="auth" options={{ headerShown: false }} /> <Stack.Screen name="post" options={{ headerShown: false }} /> <Stack.Screen name="modal" options={{ presentation: "modal", title: "Modal" }} /> </Stack> ); }
react-native typescript expo react-hook-form react-query
wodnd0284
2025-12-17T05:21:36.976Z
댓글 1
좋아요 0
조회수 117
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
일단 위 화면까지는 PC에서 나오는데, Development servers에 링크를 클릭하면 아무 반응이 없는데, 어떻게 해야하는지 문의드립니다. 그리고, 실제 안드로이드 폰에서 테스트시에도, 아래와 같이 홈화면에 아무것도 나오지 않고, 하단 메뉴만 노출되고, 내 프로필을 클릭하면 하단 이미지 두번째처럼 오류가 나고 있습니다. 어떻게 해결해야하는지 문의드립니다.
react-native typescript expo react-hook-form react-query
Ethan
2025-11-16T02:44:57.229Z
댓글 1
좋아요 0
조회수 152
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
강사님 해결 되었습니다! 글 삭제가 안보이네요..
react-native typescript expo react-hook-form react-query
freshour
2025-11-10T07:43:33.471Z
댓글 1
좋아요 1
조회수 129
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
18번째 줄에서 useEffect 같은 훅에서 호출한 게 아닌데 useScrollToTop()은 어떻게 트리거되어 동작하는지 궁금합니다. 6번째 줄에서 useScrollToTop() 훅은 "@react-navigation/native"에서 가져오고 있는데, "expo-router"와 같이 사용해도 되나요?
react-native typescript expo react-hook-form react-query
Jena Kim
2025-11-06T05:01:05.160Z
댓글 2
좋아요 0
조회수 135
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
서버쪽 코드의 .env 파일을 보면 JWT이 기본적으로 20분으로 설정되어 있는 것을 보았습니다. 예를 들어 JWT이 만료가 되고 이어서 진행을 하게 된다면, AuthRoute에 해당되는 경로들을 클라이언트에서는 여전히 접근이 가능하지만 서버에서 400번대를 응답합니다. 일반적으로 앱을 사용했던 경험을 생각하면 앱의 세션은 웹에 비해서 매우 길거나 백엔드에 대한 지식은 충분하지 않아 모르겠지만, 백엔드에서 새로 접속시 연장을 하는 등의 방법이 생각 나는데요 이런 경우에 클라이언트에서는 어떻게 처리를 해야하는지 아니면 실무적으로는 어떻게 처리하는 지 궁금합니다. 혹시라도 추가로 검색해서 공부할 수 있는 키워드가 있다면 알려주실 수 있을까요?
react-native typescript expo react-hook-form react-query
yeong
2025-10-24T02:50:13.287Z
댓글 2
좋아요 0
조회수 122
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
강사님, npx expo start를 입력후, a를 선택하면, 아래와 같이 에러 메시지가 나옵니다. 아래 이미지와 같이 pixel 9 pro가 정상적으로 설치되어 있는데, 뭐가 잘못된건지 모르겠어서 문의드립니다.ㅠ › Opening on Android... CommandError: No Android connected device found, and no emulators could be started automatically. Connect a device or create an emulator ( https://docs.expo.dev/workflow/android-studio-emulator ). Then follow the instructions here to enable USB debugging: https://developer.android.com/studio/run/device.html#developer-device-options . If you are using Genymotion go to Settings -> ADB, select "Use custom Android SDK tools", and point it at your Android SDK directory.
react-native typescript expo react-hook-form react-query
Ethan
2025-10-22T04:16:25.504Z
댓글 1
좋아요 0
조회수 180
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
optimistic-updates#updating-a-single-todo 문서를 보면 useMutation - onError의 모든 parameter err, newPost (variables), onMutationResult, context와 onSettle의 모든 parameter를 사용해서 구현하는데, client를 queryClient를 가져와서 쓰는 강의 중 예제와, 문서 내의 내용으로 구현한 아래의 주석처리된 구현은 어떤 차이가 있을까요? onError: (err, newPost, context) => { queryClient.setQueryData( [queryKeys.POST, queryKeys.GET_POST, context?.newPost?.id], context?.previousPost, ); }, // onError: (err, newPost, onMutationResult, context) => { // context.client.setQueryData( // [ // queryKeys.POST, // queryKeys.GET_POST, // onMutationResult?.previousPost?.id, // ], // onMutationResult?.previousPost, // ); // }, onSettled: (data, error, variables, context) => { queryClient.invalidateQueries({ queryKey: [queryKeys.POST, queryKeys.GET_POST, variables], }); queryClient.invalidateQueries({ queryKey: [queryKeys.POST, queryKeys.GET_POSTS], }); }, // onSettled: (data, error, variables, onMutationResult, context) => { // context.client.invalidateQueries({ // queryKey: [queryKeys.POST, queryKeys.GET_POST, variables], // }); // context.client.invalidateQueries({ // queryKey: [queryKeys.POST, queryKeys.GET_POSTS], // }); // }, a
react-native typescript expo react-hook-form react-query
yeong
2025-10-20T04:31:13.506Z
댓글 1
좋아요 0
조회수 93
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
ios 26부터 headerLeft 주위에 그림자가 생기고 클릭시 안에 내용이 커지는 효과가 생기는데 없앨 수 있는 방법이 있을까요? 열심히 검색해봐도 쉽지 않네요 ㅎㅎ,,
react-native typescript expo react-hook-form react-query
wjsyuwls
2025-10-12T13:29:58.466Z
댓글 2
좋아요 1
조회수 194
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
안녕하세요! 이제 절반 이상 수강중인 열혈 수강생입니다 !! 다름이 아니고, 올해, 어플 배포가 목표인데요 아바타 이미지는 저작권이 있기에 모두 제거하고 자체 제작으로 이미지 파일을 구성하여 다시 추가하려 합니다. 인강을 다 듣고 나서 제 아이디어를 첨가하고 아바타 이미지만 바꿔 출시해도 되는 부분일까요?
react-native typescript expo react-hook-form react-query
Kim Da Bin
2025-10-10T14:27:27.160Z
댓글 1
좋아요 0
조회수 115
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
❗ 질문 작성시 꼭 참고해주세요 에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다. 질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github 을 첨부해주세요. 개발중인 OS, ReactNative, Node 버전 등의 개발환경 을 알려주셔야합니다. 에러메세지는 일부분이 아닌 전체 상황 을 올려주세요. 일부만 보여주시면 답변이 어렵습니다. 에러 잘라서 올리시면 안됩니다! (에러 일부만 자르거나 일부만 복사하지말아주세요) 코드 수정 시 안드로이드 시뮬레이터는 자동 반영이 되는데, ios 시뮬레이터는 자동으로 반영이 안 됩니다.. 그리고 r 버튼 눌러서 reload app 하려하면 No apps connected. Sending "reload" to all React Native apps failed. Make sure your app is running in the simulator or on a phone connected via USB. 이렇게 나오네요.. 연결은 된 것 같은데 왜 그럴까요?
react-native typescript expo react-hook-form react-query
재오
2025-10-06T06:30:23.977Z
댓글 1
좋아요 0
조회수 134
미해결
아바타 커뮤니티앱 만들기 (React Native Expo)
강의 내용을 따라하는데 저같은경우 emulator : Pixel_9_Pro expo version : 54.0.12 입니다.
react-native typescript expo react-hook-form react-query
구름이
2025-10-06T04:31:37.150Z
댓글 2
좋아요 0
조회수 126