묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결React Native with Expo: 제로초에게 제대로 배우기
질문아닙니다ㅜㅜ
질문은 아닌데..챌린지 미션에 질문하기가 있어서 쓰니까 신경쓰지 말아주세요...Link Share 공유 url은 components/Post.tsx에 있음 공식문서: share 부분 확인 ios에서는 url을 같이 넣어주면 좋고, 안드로이드에서는 title을 넣어주면 좋음File Share expo-sharing 라이브러리 설치 후 사용 폰에 있는 파일을 다른 앱에 공유 가능다른 앱에서 내 expo앱으로 공유하고 싶을 때 expo기본지원x Expo Share Extension이라는 외부 라이브러리를 따로 설치해서 사용해야 함 근데 npm run prebuild를 해야하는데, 이럼 expo-go에서 벗어나 native단을 건듦한번 설치하면 못돌아옴
-
미해결React Native with Expo: 제로초에게 제대로 배우기
Expo 강의 질문 (preview build?)
혹시 ios나 android 네이티브 빌드해서 연동하는 방법도 해당 강의에서 진행하나요? 현재 25강을 듣고 있긴 한데... 들으면 들을수록 네이티브쪽도 건들어야하는 것 같아서 질문드립니다! 혹시나 해당 강의가 포함되어있으면 몇 강인지 말씀주실 수 있으신가요? 또... 스위프트, 코틀린 말고 자바나 오브젝티브씨도 같이 알아야하나요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
사진 촬영 후 갤러리 저장 시 권한 문제
안녕하세요, 제로초님! 강의 잘 듣고 있습니다.다름이 아니라 ImagePicker로 카메라 사진 촬영 후 MediaLibrary를 사용해서 갤러리에 저장할 때, 다음과 같은 에러가 발생합니다.확인해보니 AUDIO 권한이 선언되지 않았다고 하는데, 아래와 같이 app.json의 plugin에 권한을 추가해도 동일한 에러가 발생합니다.{ "expo": { // ... "plugins": [ // ... [ "expo-media-library", { "photosPermission": "Allow $(PRODUCT_NAME) to access your photos.", "savePhotosPermission": "Allow $(PRODUCT_NAME) to save photos.", "isAccessMediaLocationEnabled": true, "granularPermissions": ["audio", "photo"] } ] ], // ... } }제로초님이 올려주신 코드를 그대로 복사 & 붙여넣기 해봐도 같은 문제가 발생하는데, 혹시 제가 놓친 부분이 있을까요...? 강의에서 다룬 부분의 코드와 package.json 첨부하겠습니다.import { FontAwesome, Ionicons } from '@expo/vector-icons'; import * as ImagePicker from 'expo-image-picker'; import * as Location from 'expo-location'; import * as MediaLibrary from 'expo-media-library'; import { useRouter } from 'expo-router'; import React, { useState } from 'react'; import { Alert, FlatList, Image, Linking, Pressable, StyleSheet, Text, TextInput, TouchableOpacity, View, } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; // ... export default function Modal() { // ... const canAddThread = (threads.at(-1)?.text.trim().length ?? 0) > 0 || (threads.at(-1)?.imageUris.length ?? 0) > 0; const canPost = threads.every( thread => thread.text.trim().length > 0 || thread.imageUris.length > 0, ); const removeThread = (id: string) => { setThreads(prevThreads => prevThreads.filter(thread => thread.id !== id), ); }; const pickImage = async (id: string) => { let { status } = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (status !== 'granted') { Alert.alert( 'Permission not granted', 'Please grant camera roll permission to use this feature', [ { text: 'Open settings', onPress: () => { Linking.openSettings(); }, }, { text: 'Cancel', }, ], ); return; } let result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ['images', 'livePhotos', 'videos'], allowsMultipleSelection: true, selectionLimit: 5, }); console.log('image result:', result); if (result.canceled) return; setThreads(prevThreads => prevThreads.map(thread => thread.id === id ? { ...thread, imageUris: thread.imageUris.concat( result.assets?.map(asset => asset.uri) ?? [], ), } : thread, ), ); }; const takePhoto = async (id: string) => { let { status } = await ImagePicker.requestCameraPermissionsAsync(); if (status !== 'granted') { Alert.alert( 'Permission not granted', 'Please grant camera permission to use this feature', [ { text: 'Open settings', onPress: () => { Linking.openSettings(); }, }, { text: 'Cancel', }, ], ); return; } let result = await ImagePicker.launchCameraAsync({ mediaTypes: ['images', 'livePhotos', 'videos'], allowsMultipleSelection: true, selectionLimit: 5, }); console.log('camera result:', result); // MediaLibrary 권한 요청 및 사진 저장 status = (await MediaLibrary.requestPermissionsAsync()).status; if (status === 'granted' && result.assets?.[0].uri) { await MediaLibrary.saveToLibraryAsync(result.assets[0].uri); } if (result.canceled) return; setThreads(prevThreads => prevThreads.map(thread => thread.id === id ? { ...thread, imageUris: thread.imageUris.concat( result.assets?.map(asset => asset.uri) ?? [], ), } : thread, ), ); }; const removeImageFromThread = (id: string, uriToRemove: string) => { setThreads(prevThreads => prevThreads.map(thread => thread.id === id ? { ...thread, imageUris: thread.imageUris.filter( uri => uri !== uriToRemove, ), } : thread, ), ); }; // ... }{ "name": "expo-threads-clone", "main": "expo-router/entry", "version": "1.0.0", "scripts": { "start": "expo start", "reset-project": "node ./scripts/reset-project.js", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web", "lint": "expo lint" }, "dependencies": { "@expo/vector-icons": "^15.0.2", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", "expo": "~54.0.12", "expo-blur": "~15.0.7", "expo-constants": "~18.0.9", "expo-dev-client": "~6.0.13", "expo-font": "~14.0.8", "expo-haptics": "~15.0.7", "expo-image": "~3.0.8", "expo-image-picker": "~17.0.8", "expo-linking": "~8.0.8", "expo-location": "~19.0.7", "expo-media-library": "~18.2.0", "expo-router": "~6.0.10", "expo-splash-screen": "~31.0.10", "expo-status-bar": "~3.0.8", "expo-symbols": "~1.0.7", "expo-system-ui": "~6.0.7", "expo-web-browser": "~15.0.8", "react": "19.1.0", "react-dom": "19.1.0", "react-native": "0.81.4", "react-native-gesture-handler": "~2.28.0", "react-native-reanimated": "~4.1.1", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-web": "~0.21.0", "react-native-worklets": "0.5.1" }, "devDependencies": { "@types/react": "~19.1.0", "typescript": "~5.9.2", "eslint": "^9.25.0", "eslint-config-expo": "~10.0.0" }, "private": true }
-
미해결React Native with Expo: 제로초에게 제대로 배우기
혹시 필요한 라이브러리들을 미리 전부 설치해도 되나요?
필요한 라이브러리를 미리 설치해둬도 되나요?expo에서 'eas build --platform android --profile development' 해당 명령어를 사용해서 빌드할 때마다 시간이 너무 오래걸려요ㅜㅜ하나 설치하면 계속 그런 라이브러리 없다고 해서 계속 다시 빌드해야해서ㅜㅜ혹시 강의에 사용한 라이브러리 리스트가 있다면 제공해주실 수 있나요?? 무료를 사용하면 1시간도 기다리라고 해서요...ㅜㅜ
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
flex를 grid 처럼 만들기 질문드립니다.
css 04-2-2 반응형과 grid 조합 - 플렉스박스와 그리드 비교 수업 12분 15초 내용을 감싸는 div를 만들어서 어떻게 해야 grid 와 같이 만들 수가 있는 건지 궁금합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.
안녕하세요. 좋은 강의 감사합니다.36강 Dio onRequest Interceptor 작업하기. 부분을 듣고 있습니다. 코드 중에서 잘 이해가 안되는 부분이 있는데요.commit s5-v5lib/restaurant/view/restaurant_detail_screen.dart추가된 코드 중에서 22~27번째 라인.아래처럼 storage를 전달하는 부분이 나오는데요.CustomInterceptor(storage: storage,),class RestaurantDetailScreen 어디를 찾아봐도 클래스 멤버나 메소드 변수에 storage는 없는데요. 어디 있는 storage가 전달되고 있는 것일까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
.
.
-
미해결React Native with Expo: 제로초에게 제대로 배우기
.
.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
2번 반환 상황 관련 질문
안녕하세요 코팩님. if (fetchMore && (isLoading || isRefetching || isFetchingMore)) { print('fetchMore=$fetchMore, isLoading=$isLoading, isRefetching=$isRefetching, isFetchingMore=$isFetchingMore'); return; }이 코드는 엄밀히 말하자면, 로딩 중일 때 paginate 요청을 했을 때 즉 너무 빠르게 스크롤 할 경우를 대비한 중복 방지를 위한 코드라고 볼 수 있을까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
.
.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
riverpod 3.0
riverpod 3.0 강의 업데이트 해주시나요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
강의속 PanResponder.create 부분의 코드가 GitHub 코드와 다름
강의 중에는 PanResponder.create에 들어가는 객체의 속성으로 onStartShouldSetPanResponder를 소개하지만, 작동이 안되서 Github 코드를 살펴보니 onMoveShouldSetPanResponder로 해야 함const panResponderRef = useRef( PanResponder.create({ onStartShouldSetPanResponder: () => true, // Pan 작업에 반응하도록 설정 onPanResponderMove: (event, gestureState) => { ... 수정 후const panResponderRef = useRef( PanResponder.create({ onMoveShouldSetPanResponder: () => true, // Pan 작업에 반응하도록 설정 onPanResponderMove: (event, gestureState) => { ...
-
미해결React Native with Expo: 제로초에게 제대로 배우기
.
.
-
미해결React Native with Expo: 제로초에게 제대로 배우기
딥링킹 문제
expo 로 돌아가고 있는거 확인한 상태에서, uri scheme 여는 명령어를 입력해도 여전히 에러가 발생한는데 어떤 부분을 확인해봐야 할까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
앱빌드중 네트우크 ssl에러때문에 모듈이 안불러와집니다!
"dependencies": { "expo": "^54.0.0", "expo-font": "~14.0.8", "expo-router": "~6.0.3", "expo-secure-store": "~15.0.7", "react": "18.3.1", "react-dom": "^18.3.1", "react-native": "^0.76.9" }, "devDependencies": { "@react-native/gradle-plugin": "^0.76.0", "@types/react": "~18.3.12", "typescript": "^5.3.3" } > Could not resolve expo.modules:expo-module-gradle-plugin:1.0.0. Required by: root project : > Could not resolve expo.modules:expo-module-gradle-plugin:1.0.0. > Could not get resource 'https://repo.expo.dev/maven/expo/modules/expo-module-gradle-plugin/1.0.0/expo-module-gradle-plugin-1.0.0.pom'. > Could not GET 'https://repo.expo.dev/maven/expo/modules/expo-module-gradle-plugin/1.0.0/expo-module-gradle-plugin-1.0.0.pom'. > The server may not support the client's requested TLS protocol versions: (TLSv1.2). You may need to configure the client to allow other protocols to be used. For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/build_environment.html#sec:gradle_system_properties in the Gradle documentation.npx expo run 하면 위처럼 에러가나옵니다 찾아보니 최근데 생기는 에러들인것같은데 별로 쌓인데이터도 없고 검색햇을때 나오는것들도 없어서 많이힘드네용
-
미해결React Native with Expo: 제로초에게 제대로 배우기
혹시 딥링킹 uri-scheme 테스트 안 되시는 분
질문 글을 올리려다가 방법을 찾고, 혹시 같은 상황이신 분이 있을지도 몰라서 공유합니다.빌드 환경에 Expo Go인지 development build인지 확인이 필요하더라구요... 저는 왜 안되는지 이것저것 삽질하며 살펴보다가 현재 환경이 Expo Go 환경이 아니라는 걸 알고 너무 허무했습니다 ㅠuri-scheme은 expo 환경만 테스트 되니까 development build 이신 경우에 s를 눌러서 Expo Go로 바꾸시면 됩니다!
-
미해결React Native with Expo: 제로초에게 제대로 배우기
activity/replies가 [username]/replies로 빠져나가는 문제
안녕하세요 중첩 라우터와 그룹폴더의 활용 듣고있는데activity/replies가 [username]/replies로 빠져나가는 문제가 발생하고 있습니다어떻게 해결하면 될까요?
-
미해결React Native with Expo: 제로초에게 제대로 배우기
tab 을 stack 에 쌓았을 때 문제
<Stack> <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> <Stack.Screen name="modal" options={{ presentation: "modal", headerShown: false }} /> </Stack>위와 같이 작업하면 탭을 누를 때마가 스택이 쌓이는게 아닌가요? 그러면 물리 백버튼을 눌렀을 때 탭 이동이 될 것 같아서요. 카카오를 예시를 보면 탭은 스택을 쌓지 않고 있어서 탭 이동을 아무리 해도 뒤로 가기를 누르면 탭 이동을 하고 있지 않네요.
-
미해결React Native with Expo: 제로초에게 제대로 배우기
wipe data 이후에 npm run android 오류
wipe data 이후에 npm run android 를 실행하면 아래와 같은 오류가 발생합니다. CommandError: No development build (com.devparkoon.rntutorial) for this project is installed. Install a development build on the target device and try again. 강의 영상과 다르게 npm run android 를 실행했을 때 expo 를 다시 설치하는 과정이 없는데 어떤 문제일까요?위 이슈를 해결하기 위해 eas build 를 다시 하면 되긴 합니다 (10분 넘게 다시 소요됨)
-
해결됨[입문] Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발
강의 자료 pdf 다운로드 할 수 있을까요?
안녕하세요 강의 자료 pdf 다운로드 할 수 있을까요?