์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์จ๋ผ์ธ
- wil
- ํ์ค
- ์๊ณ ๋ฆฌ์ฆ
- native
- ํ๋ก์ ํธ
- Redux
- K-Digital
- JavaScript
- ํ์
- Firebase
- ๋ฆฌ์กํธ
- ๋ณ์
- trainning
- ์ฝ๋ฉ
- react
- ํจ์
- ๋ถํธ์บ ํ
- JS
- ๊ฐ๋ฐ์
- NEXT
- ํ๋ก ํธ์๋
- ๋ด์ผ๋ฐฐ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฌ
- ๋ด์ผ๋ฐฐ์์บ ํ
- PROJECT
- API
- type
- rn
- Today
- Total
Frontend ๊ฐ๋ฐ์ - hyo.loui
Project : MZL - ๋ก๊ทธ์์, ๋ง์ดํ์ด์ง ์ด๋ ์ ์๋ฌํด๊ฒฐ ๋ณธ๋ฌธ
Project : MZL - ๋ก๊ทธ์์, ๋ง์ดํ์ด์ง ์ด๋ ์ ์๋ฌํด๊ฒฐ
hyo.loui 2023. 1. 11. 20:41๐ฏ๋ชฉ์ :
๋ง์ดํ์ด์ง์ ๊ตฌํํ ๋ก์ง๊ณผ
authentication API ๋ณต์ต,
๐คข ์ค๋ฅ ํด๊ฒฐ :
- ๋ก๊ทธ์์ ํ ๋ง์ดํ์ด์ง, ๊ฒ์๊ธ์ฐ๊ธฐ component ์ด๋ ์ ์๋ฌ (useEffect ์ useFocusEffect ์์ ๋ฐ์ํ ์๋ฌ ํด๊ฒฐ)
1. ๋๋ค์ ์์
UI ๋ถ๋ถ์์ ์ผํญ์ฐ์ฐ์๋ก
์์ ๋ฒํผ์ด onPress๋์ด onPressUpdate()ํจ์๊ฐ ์คํ์ด ๋๋ฉด
setState๊ฐ ๋์ด onEdit์ด๋ผ๋ state๋ ๋ถ๋ฆฌ์ธํ์ ์ด๋ฉฐ ํ ๊ธ(true or false)์ด ๋๋ค!
์ดํ onEdit์ ์ํ์ ๋ฐ๋ผ์ false๊ฐ ๋๋ค๋ฉด
๊ธฐ์กด์ ์๋ ๋๋ค์์ ๊ฐ์ผ ํ๊ทธ๊ฐ TextInput์ผ๋ก ๋ฐ๋๊ฒ ๋๊ณ
์์ ๋ฒํผ๋ ์๋ฃ๋ฒํผ์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค!
์๋ฃ๋ฒํผ์ด ๊ฐ์ง ํจ์๋ onSubmitEdit()์ผ๋ก
updateProfile API๋ฅผ ์คํํด ๋ก๊ทธ์ธ๋์ด์๋ ์ ์ ์ displayName์
TextInput์์ ๋ฐ์์จ state์ธ editText๋ก ๋ณ๊ฒฝํ๋ค!
TextInput์์๋ value๋ก ๊ธฐ์กด๊ฐ์ ์ ์งํ๊ธฐ ์ํด state์๋
displayName์ด๋ผ๋ ๋ณ์๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋ค
ํด๋น ๊ณผ์ ์์ CRUD ์ update๋ถ๋ถ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ์ ์ด ์์ด
๋ง์ด ๊ฒฝํํ๋ ํฐ๋ผ, ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์์๋ค.
2. ๋ก๊ทธ์์
์์ ๋๋ค์ ์์ ์ ๋ก์ง์ ๋นํด
๋ก๊ทธ์์์ firebase API๊ฐ ์์ฃผ ๊น๋ํ๊ฒ ๊ตฌ์ฑ๋์ด ๊ฐ๋จํ๊ฒ ๊ตฌํ ํ ์ ์์๋ค
auth๋ผ๋ ๋ณ์๋ firebase ์์ getAuthํจ์๊ฐ ์คํ๋๋ฉฐ export >> import ํ์ฌ ๊ฐ์ ธ์๊ณ ,
signOut() API ๋ฅผ ํธ์ถํ๋ฉด ๋ฐ๋ก ๋ก๊ทธ์์ ์ํ๋ก ์ ํ๋๋ค
์ดํ reset()ํจ์๋ก Tabs์ Home์ผ๋ก ์ด๋์์ผ์ค๋ค
์ ๊ณผ์ ์์ ๋ค์ํ๋ฒ reset์ ๋ํด ์ดํดํ ์ ์์๋ค.
3. ๋ก๊ทธ์์ ์ํ์์ ๋ง์ดํ์ด์ง ์ ๊ทผ
์ ์กฐ๊ฑด๋ฌธ์
๋ ผ๋ฆฌ ๋ถ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. ์๋ ์ฐธ์กฐ ๋งํฌ๋ฅผ ๋ณด๋ฉด ์์ธํ ๊ณต๋ถํ ์ ์๋ค.
auth์ currentUser(๋ก๊ทธ์ธ์ํ ์ ์ ์ ์ ๋ณด)๊ฐ false์ผ ๊ฒฝ์ฐ,
๋ฐ๋๋ก true๋ฅผ ๋ฐํํ์ฌ ํด๋น ์กฐ๊ฑด๋ฌธ์ด ์คํ๋๋ฉฐ
reset์ผ๋ก login screen์ ์ ๋ํ๋ค
ํด๋น ์ฝ๋๋ก ๋ ผ๋ฆฌ๋ถ์ ์ฐ์ฐ์๋ฅผ ๋ค์ ๊ณต๋ถํ๊ณ ,
return์ผ๋ก ์ข ๋ฃ์์ผ์ฃผ์ง ์์ ๋ฌธ์ ๋ฅผ ํตํด ์๋ฌ๋ฅผ ๋ง๋ ์๋ ์ค๋ฅ ํด๊ฒฐ์ ์์ฑํ๋ค
4. useFocusEffect useCallback
์ฐ๋ฆฌ๊ฐ ๊ณต๋ถํ React์๋ ๋ค๋ฅด๊ฒ RN์์๋
๋ง์ดํธ์ ์ธ๋ง์ดํธ์ ๊ฐ๋ ์ด ์๋๋ผ
์๋กญ๊ฒ ๋๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค
์ฝ๊ฒ ๋งํด useEffect๋
react == ๊ฐ์๋ ๋ง์ดํธ, ์ธ๋ง์ดํธ
react-native == ์คํฌ๋ฆฐ(์ปดํฌ๋ํธ) ๋ ๋๋ง
๊ทธ๋์ ๊ฒฐ๋ก ์
RN์์๋ useEffect๋ฅผ ์ฌ์ฉํ๋ฉด
1ํ์ฑ์ผ๋ก ํ๋ฒ๋ง ์คํํ๊ฒ ๋๋ฏ๋ก useFocusEffect ๋ฅผ ์ฌ์ฉํด์ผํ๋ค
useFocusEffect == ์คํฌ๋ฆฐ์ด ํฌ์ปค์ค(ํ๋ฉด์ ์๊ฑฐ๋ ์๊ฑฐ๋๋ฅผ ๊ฐ์ง!
์์์ ์ค๋ช ํ ์กฐ๊ฑด๋ฌธ์ ๋ฐ๋ผ Mypage๊ฐ ๋ ๋๋ง์ด๋๋ฉด ์ฐ์
์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ก๊ทธ์์ ์ํ๋ถํฐ ๊ฐ์งํ๋ค!
๋ง์ฝ ์กฐ๊ฑด์ ๊ฑธ๋ฆฌ์ง ์๋๋ค๋ฉด ๋ฐ๋ก ์ฟผ๋ฆฌ์ ์ ์ ์, firebase์ DB์ธ firestore์
Words๋ผ๋ ์ปฌ๋ ์
์ ์ ๊ทผํด where API๋ฅผ ํตํด
์ ์ ์ ์์ด๋์, ๋ฐ์ดํฐ์ ์๋ ์์ด๋๋ฅผ ๋์กฐํ์ฌ, ๊ฐ์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ฒ ๋์ด
๋ง์ดํ์ด์ง์์ ๋ด๊ฐ ์์ฑํ ๊ธ ๋ณด๊ธฐ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์๋ค!
๋ return ์ผ๋ก myPosts()๋ฅผ ์คํํ ์ด์ ๋
onSnapshot ํจ์๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ ์ฟผ๋ฆฌ์ ๋ณ๋์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ํจ์์ด๊ธฐ ๋๋ฌธ์
์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ธ ์ ์๋๋ฐ,
Mypage์์ ๋ค๋ฅธ screen์ผ๋ก ์ด๋ ํ์ ๋ onSnapshot์ด
๊ณ์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋จ์์๋ค๋ฉด,
๋ฉ๋ชจ๋ฆฌ๋ ์น ์ฑ๋ฅ์ด ์ ํ๋๋ฏ๋ก return ์ ์ฌ์ฉํด onSnapshot์ ์ข ๋ฃ์์ผ ์ฃผ์๋ค
์ ๊ณผ์ ์์ ๋ก๊ทธ์์ ์ํ๋ฅผ ๊ฐ์งํ๋ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด ๋ณด์๊ณ ,
whereํจ์๋ก ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ฌ์ filter์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์ฌ ์ ์์๋ค.
๋ useFocusEffect์ useCallback ์ฌ์ฉ ๊ฒฝํ์ ์์๋ค.
+ ์ค๋ฅ ํด๊ฒฐ :
before - ํด๊ฒฐ ์
RN firebase authentication signOut() ํจ์ ์คํ ํ ๋ง์ดํ์ด์ง, ํฌ์คํธ ํ์ด์ง์ ์ ๊ทผ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์๋ฌ ๋ด์ฉ์
Render Error
null is not an object (evaluating
'_firebase.auth.currentUser.displayName')
+ ์ค๋ฅ ํด๊ฒฐ :
๋ก์ง์ ์์๋ฅผ ์ ๋ฐ๋ผ๊ฐ ๋ณด๊ฒ ๋ค
- ๋ก๊ทธ์์ ์คํ
- ํ ํ๋ฉด์ผ๋ก ์ด๋
- ๋ง์ดํ์ด์ง ํด๋ฆญ
- useEffectFocus ๊ตฌ๋ฌธ ์คํ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฐ์ ์ฝ๋๋ฅผ ์ฝ๊ณ ๋์ ๋ ๋๋ง์ ํ๊ธฐ ๋๋ฌธ์
์ฝ๋๋ฅผ ์ฝ๋ ๊ณผ์ ์์ currentUser์ ์ ๋ณด๋ค์ด ์๋ค๊ณ ์๋ฌ ๋ฐ์
์์ธํ์ ํ๋๋ฐ ๊น์ง ์ฝ 2-3์๊ฐ ์ด์ ์์๋ ๊ฒ ๊ฐ๋ค.
myPosts๊ฐ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ์์ ๋จผ์ ์ ์ธํด๋ ๋ณ์์ธ uid(currentUser.uid)๋ฅผ ๊ฐ์ง๊ณ ์์ด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น๋ด์ฉ์์ error๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ์ ์ ์ผ๋ก null๋ณํฉ ์ฐ์ฐ์ ์ด์ฉํ์ฌ
์๋ฌ๋ฅผ ํด๊ฒฐํ์์ง๋ง ๊ทผ๋ณธ์ ์์ธ์ด ํด๊ฒฐ๋์ง ์์ ์ํ์๋ค.
๊ทธ๋์
์ฐ์ if ๋ฌธ์ผ๋ก ๋ค์ ์๋ ๋ก์ง์ด ์คํ๋์ง ์๊ณ ๋ฐ๋ก ๋ฐํ๋๊ฒ๋ return์ ์์ฑํด ์ฃผ์๊ณ ,
useFocusEffect ์ ๋ด๋ถ return์ ์ฌ์ฉํด myPosts๋ฅผ ๋ฃ์ด ์คํฌ๋ฆฐ์ด ๋ฐ๋๋ค๋ฉด, ํจ์๊ฐ ์ข ๋ฃ๋๊ฒ๋
๋ง๋ค์ด ์ฃผ์๋ค!
์ต์ข ์ ๋ฆฌ
- ํ์ ์ ๋ณด๋ฅผ ๋ง๋ค๊ณ , ๋ณด์ฌ์ฃผ๊ณ , ๋ฐ๊ฟ์ฃผ๊ณ , ์ญ์ ํ๋ ๋ถ๋ถ์ CRUD์ api๋ง ๋ค๋ฅผ ๋ฟ ๋ก์ง์ ๊ฑฐ์ ํก์ฌํ๋ค
- ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์ด๋ ํ ํจ์๋ฅผ ์คํํ ํ return์ ํด์ฃผ์ด ์ฝ๋๋ฅผ ์ข ๋ฃํด ์ฃผ์
- ๋ ผ๋ฆฌ๋ถ์ ์ฐ์ฐ์๋ก true์ false ๋ฐํ
- RN์์๋ useEffect๊ฐ 1ํ์ฑ์ด๋ฏ๋ก useFocusEffect์ useCallback์ ์ฌ์ฉํ์
- ์๋ฌ๋ฅผ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ๋ ค๋ ๊ฒ ๋ณด๋ค ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ์์ผ ํ๋ค!
- useFocusEffect ๋ด๋ถ์์ return์ผ๋ก ์คํฌ๋ฆฐ์ด ํฌ์ปค์ค์์์ด ๋ ๋๋ฅผ ์ค์ ํ ์ ์๋ค
์ฐธ์กฐ:
https://velog.io/@chltjdrhd777/RN-useFocusEffect%EC%9D%98-%ED%96%89%EB%8F%99%EC%96%91%EC%8B%9D
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Project: Develife - main ๊ตฌ์ฑ๊ณผ React-Query ์ ์ฉ (0) | 2023.01.26 |
---|---|
Project : MZ Language (MZL) - KPT ํ๊ณ (0) | 2023.01.13 |
Project : MZL - ๋ก๊ทธ์ธ (0) | 2023.01.11 |
Project : MZL - ํ์๊ฐ์ (0) | 2023.01.09 |
Project : helprogrammers - ์๊ฐ(์ด๋์ฅ) (0) | 2022.12.28 |