해결된 질문
작성
·
165
0
안녕하세요.
지난번 질문 드렸던 것은 해결이 되었는데요. (인터셉터 / DB 마이그 postgres -> mssql / fcm push )
구성은 강의 파일 기반으로 추가 및 수정 하고 있습니다.
nest js 서버( + fcm 송신 서버) -> android(fcm 알림 수신)
android fcm 수신 후 백그라운드 데이터 가공 (서버/로컬 data 처리 ) -> 가공 데이터로 push 생성
데이터 가공 (hooks) 하기 위해 (FetchData.ts) 파일을 import 하였습니다. (ok)
import useFetchData from '@/hooks/useFetchData';
발생한 push 알림 메세지를 클릭시 특정 화면으로 이동하고 싶은데요.
ex) FeedList.tsx // FeedHomeScreen.tsx 쪽으로 이동하고 싶은데요.. 잘 안되고 있습니다.
(이벤트 발생 위치는 알지만 처리를 못하고 있습니다.)
App내에서 hooks을 사용해서 그런지
App 내에서 useNavigation() 을 사용해서 처리 하려고 했더니
navigation.navigate('RootNavigator');
MainDrawerNavigator / FeedList / FeedHomeScreen 등등 해봤는데 시작 전에 에러나 가더라고요.
렌더링 에러가 납니다.
import React, { useEffect } from 'react';
import { StatusBar, Platform } from 'react-native';
import { NavigationContainer, useNavigation } from '@react-navigation/native';
import { QueryClientProvider } from '@tanstack/react-query';
import Toast, { BaseToast, BaseToastProps, ErrorToast } from 'react-native-toast-message';
import MainDrawerNavigator from './src/navigations/drawer/MainDrawerNavigator';
import AuthStackNavigator from './src/navigations/stack/AuthStackNavigator';
import useAuth from '@/hooks/queries/useAuth';
import RootNavigator from './src/navigations/root/RootNavigator';
import queryClient from './src/api/queryClient';
import { colors } from '@/constants';
import useThemeStorage from '@/hooks/useThemeStorage';
// push 추가
import messaging from '@react-native-firebase/messaging';
import PushNotification from 'react-native-push-notification';
import PushNotificationIOS from '@react-native-community/push-notification-ios';
import { getEncryptStorage, setEncryptStorage } from '@/utils/encryptStorage';
import useFetchData from '@/hooks/useFetchData';
const App = () => {
const navigation = useNavigation(); // 화면 이동용
const { theme } = useThemeStorage();
const { fetchData } = useFetchData(); // 데이터 가공
usePushNotifications(fetchData, navigation); // FCM수신 -> 가공data 전달
useTokenRegistration(); // 토큰 저장
return (
<QueryClientProvider client={queryClient}>
<NavigationContainer>
<StatusBar
barStyle={theme === 'light' ? 'dark-content' : 'light-content'}
backgroundColor={theme === 'light' ? colors['light'].WHITE : colors['light'].BLACK}
/>
<RootNavigator />
<Toast config={toastConfig} />
</NavigationContainer>
</QueryClientProvider>
);
};
어떻게 접근 해야 할지 잘 모르겠습니다.
베이스가 부족해서 그런지 네이게이터와 스크린 (단순 이동 뿐이 못하겠습니다. ㅎㅎ)
주말 잘 보내세요 감사합니다.
답변 1
1
강의와 다른것을 구현하고 계시고, 각 hooks들이 무슨 역할이고 어떻게 구현하셨는지, 어떤에러가 발생했는지 잘 모르겠어서 도움드리기가 어려울것 같아요! 다만 화면을 이동할때 네비게이터를 넣으셨다고 했는데 스크린으로 이동을 해주셔야할것같습니다.
답변 감사합니다.
말씀하시긴 내용 기반으로 이것 저것 해봐야 할 것 같습니다.
사실 특정 화면으로 다이렉트 화면을 이동하고 싶은거라서요.
App->Root->Main->FeedList (기존) 이런식아니고
바로 App(FCM 수신) -> FeeList(변경)로 이동하고 싶은거라서요.
빠른 감사합니다. ㅎㅎ
감사합니다. 해결했습니다. - 글을 수정했더니 ... 엄청 깨지네요..
App에서 직접 사용 안되고 AppContent 한번 감싸서(Boxing?/래핑? ) 사용 해야 되나보네요..
빡싱(boxing) 한번 해서 레벨을 App보다 낮춰서 사용하니깐 되네요.. (이미 fechData.ts 쓸때 사용했는데 이해를 못하고 한거라...... )
AppContent 에서 useNavigation() 선언해서 호출할 곳에서 스크린명으로 호출하니 바로 이동 되네요.
App (TOP)레벨에서는 Hooks이나 useNavigation 을 직접 사용 못해서 그런것 같습니다.
navigation.navigate(mainNavigations.선언명);
const AppContent = () => { const navigation = useNavigation(); const { fetchData } = useFetchData(); usePushNotifications(fetchData, navigation); return ( <RootNavigator /> ); }; const App = () => { const { theme } = useThemeStorage(); useTokenRegistration(); return ( <QueryClientProvider client={queryClient}> <NavigationContainer> <StatusBar barStyle={theme === 'light' ? 'dark-content' : 'light-content'} backgroundColor={theme === 'light' ? colors['light'].WHITE : colors['light'].BLACK} /> <AppContent /> <Toast config={toastConfig} /> </NavigationContainer> </QueryClientProvider> ); };
빠른 답변 감사합니다.
변경된 코드가 강좌와 성격도 다르고 내용도 달라져서 질문하기 쉽지 않았는데요.
좀 더 찾아 보겠습니다. 감사합니다.