2024. 11. 14. 21:48γμΉ΄ν κ³ λ¦¬ μμ
μλ
νμΈμ~~!!
μ€λ λ²μ¨ μ μ μΊ‘μ€ν€μ μκ°νλ 6μ§Έ μκ°μ΄λ€μ ν¬ν¬ν¬
μ€λμ μ΄λ€ κΈμ λ¨κΈΈκΉ~~ νλ€κ°
μ°μ μ°μ μ무λλ μνκ΄λ¦¬λ§νΌ λ μ€μνκ² μμμμ~?
React Nativeμμμ 'μν'λ λκ°μ§λ‘ ꡬλΆμ΄ λλλ°,
λ‘컬 μνμ κΈλ‘λ² μν
[μΌμͺ½ νΈλ¦¬ κ·Έλ¦Ό]
- useState λ±μ λ‘컬 μνκ΄λ¦¬ : νν¬λ λ‘컬 κ΅¬μ± μμ μνμ μ¬μ©ν΄μ.
μνλ₯Ό νΉμ κ΅¬μ± μμμ λ‘μ»¬λ‘ μ μ§νκ³ ν΄λΉ κ΅¬μ± μμκ° μ체 μνλ₯Ό μ μ΄ν μ μλλ‘ ν©λλ€.
μ΄ μνλ λͺ μμ μΌλ‘ propsλ‘ μ λ¬νκ±°λ μ μ μν κ΄λ¦¬ νμμ μ¬μ©νμ§ μλ ν
κ΅¬μ± μμ κ° κ³΅μ λμ§ μμ΅λλ€!!
[μ€λ₯Έμͺ½ νΈλ¦¬ κ·Έλ¦Ό]
- Redux storeμ μ μ μν κ΄λ¦¬ : Redux μ€ν μ΄λ μ°κ²°λ μ±μ λͺ¨λ κ΅¬μ± μμμμ μ‘μΈμ€ ν μ μλ μ μ μ± μνλ₯Ό 보μ ν©λλ€. Redux μ€ν μ΄λ μ±μ μν κ΄λ¦¬λ₯Ό μ€μμ§μ€ννλλ‘ μ€κ³ λμμ΄μ.
κ·Έλ¦ΌμΌλ‘ 보면 ν λμ μ΄ν΄ν μ μκ² μ£ ??
ν΄λΉ κΈμμλ μ μ μν κ΄λ¦¬ λ°©λ²μΈ Reduxμ λν΄ μκ°ν΄ λ릴거μμ!
λ‘컬 μν κ΄λ¦¬μ λν κΈμ
https://dlawlgus40.tistory.com/116
[RN] νλ‘μ νΈλ₯Ό μ§ννλ©° κ²ͺμ Props Drilling λ¬Έμ , κ·Έλ¦¬κ³ Redux λΆμ
React-Nativeλ‘ μ±μ λ§λλ μ 무λ₯Ό ν λΉ λ°κ³ μΌλ¨ νλ©΄μ λ§λ€μ΄ λ΄μΌ νλ€λ μκ°μ ν¬κ² κ³ λ―Ό μμ΄ κ°μ₯ κΈ°λ³Έμ΄ λλ hook(useState, useEffect), κ·Έλ¦¬κ³ props λ‘ νμν μ 보λ₯Ό λ겨κ°λ©° νλ©΄μ ꡬμ±ν΄
dlawlgus40.tistory.com
μ’ μ~λ μ μ΄ κΈμ΄μ§λ§ μ΄ κΈμμ μ 리λ₯Ό νμ΄μ.
μ²μ react λ₯Ό μ ν λ μ»λ κΈμ΄λΌ μ’ μ‘°μ‘νμ§λ§... μ λλ λλ¦ μ΄μ¬ν μ 리νλ΅λλ€...γ γ
μλ¬΄νΌ !!
μ μ νλ‘μ νΈμμ Reduxλ₯Ό μ’ λ μ½κ² μ¬μ©ν μ μλ
Redux toolkitμ μ¬μ©νμμ΄μ.
μνκ΄λ¦¬κ° λλκΉ.. νλ‘ νΈμλμ κ½?? κ°μ λλμ΄μμ
λκ² λκ² ν΅μ¬ κ°μ..
μ΄λ² κΈμμλ μ νλ‘μ νΈμ Redux ToolKitλ₯Ό μ΄λ»κ² μ¬μ©νμλμ§μ λν΄
μ€λͺ ν΄λ릴κ²μ~~ππ
ꡬ쑰λ λ€μκ³Ό κ°μ΄ ꡬμ±νμμ΄μ.
λμ νλ μμλ₯Ό μ°¨κ·Όμ°¨κ·Ό μλ €λ릴κ²μ
1. Redux ν΄ν· μ€μΉ
# NPM
npm install @reduxjs/toolkit
# Yarn
yarn add @reduxjs/toolkit
μ€μΉ λ¨Όμ ν΄μ€μ!!
2. Redux store μ€μ (configureStore)
첫 λ²μ§Έ λ¨κ³μμλ Redux storeλ₯Ό μμ±νλ κ²μ λλ€.
Redux Toolkitμ configureStoreλ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό μννκ² λλλ°
μ΄ store μ μν μ μ½κ² λ§ν΄ μ΄νμ μνλ₯Ό 보κ΄νλ μν μ ν΄μ!
Reduxμλ storeκ° νλλ§ μκΈ° λλ¬Έμ μνλ μ± μ 체μμ μΌκ΄λ ννλ₯Ό λμ!
κ·Έλμ configureStoreλ νλ²λ§ μ μλκ² μ£ ?
μ΄λ° νΉμ§μ κ°κ³
storeμ μ£Όμ μν μ μμ½νμλ©΄,
- λ¨μΌ μ 보 μμ€ : μ€ν μ΄λ μ± μ 체 μνλ₯Ό 보μ νλ€.
- μ€μ μ§μ€μ μν κ΄λ¦¬
export default configureStore({
reducer: {
user: userSlice,
navigationSource: navigationSourceSlice,
},
});
3. Redux μ¬λΌμ΄μ€ μμ±
createSlice λ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄μ€λ₯Ό λ§λ€μ΄μ€μ!
μ¬λΌμ΄μ€λ μνμ μΌλΆλ₯Ό μ μνκ³ μ΄λ₯Ό μμ νκΈ° μν 리λμ λ° μμ μ μ 곡ν©λλ€.
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
name: '',
email: '',
};
const userSlice = createSlice({
name: 'user', // The slice name used in the store
initialState,
reducers: {
setUser: (state, action) => {
state.name = action.payload.name;
state.email = action.payload.email;
},
},
});
export const { setUser } = userSlice.actions;
export default userSlice.reducer;
createSliceλ μλμΌλ‘ μ‘μ κ³Ό 리λμλ₯Ό μμ±ν΄μ.
initialStateλ λ³μλͺ κ·Έλλ‘ μ΄κΈ° μνλ₯Ό μ μνλ λ³μμ λλ€.
리λμλ μνλ₯Ό μμ νλ ν¨μ, μ‘μ μ μν λ³κ²½μ νΈλ¦¬κ±° νκΈ° μν΄ μ λ¬ν©λλ€.
μ¬κΈ°μ μμ μ΄ νμλ‘ νλ μνλ€μ μ΄κΈ° κ°κ³Ό λ³κ²½ 리λμλ€μ μ μν΄μ£Όμ΄μ!
4. Provider λ‘ μ± λννκΈ°
import { Provider } from 'react-redux';
import { NavigationContainer } from '@react-navigation/native';
import { store } from './store'; // Import the store you just createdimport AppStackNavigation from './navigation/AppStackNavigation'; // Your navigation setup
export default function App() {
return (
<Provider store={store}> {/* Wrap the entire app with Provider */}
<NavigationContainer>
<AppStackNavigation />
</NavigationContainer>
</Provider>
);
}
μ΄μ Provider ꡬμ±μμμ μ ν리μΌμ΄μ μ λνν΄μ€μΌν΄μ.
μ 체 μ±μμ Redux storeλ₯Ό μ¬μ©νκΈ° μν΄μ νμλ‘ ν΄μ£Όμ΄μΌ νλ μμ μ΄μμ.
5. Redux μν μ λ°μ΄νΈ νκΈ°
μμμ μ²λΌ μ€ν μ΄λ₯Ό μ°κ²°λλ©΄ μ»΄ν¬λνΈ, νλ©΄κ°μ μν μ λ¬μ΄ κ°λ₯ν΄μ Έμ!
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { setUser } from './slices/userSlice';
const UserProfile = () => {
const user = useSelector((state) => state.user); // Get user data from Redux store
const dispatch = useDispatch(); // Get dispatch function
const updateUser = () => {
dispatch(setUser({ name: 'John Doe', email: 'john.doe@example.com' }));
};
return (
<div>
<h1>User Profile</h1>
<p>Name: {user.name}</p>
<p>Email: {user.email}</p>
<button onClick={updateUser}>Update User</button>
</div>
);
};
export default UserProfile;
- useSelect λ redux μ μ₯μμ μνμ μ‘μΈμ€ νκΈ° μν΄ Reduxμμ μ 곡νλ νν¬μμ.
μμ μ½λμ²λΌ state.userμ κ°μ Έμ€λ©΄ 'user'λΌλ μ΄λ¦μ κ°μ§ sliceμ μ 체 μνλ₯Ό κ°μ Έμ¨λ€λ κ²μ λλ€.
- useDispatch λ μμ μ μ λ¬νκΈ° μν΄ reduxμμ μ 곡νλ νν¬μμ.
dispatch(setUser ~~) μ΄λ°μμΌλ‘ setUserμ nameμ΄λ email λ₯Ό μ λ°μ΄νΈ νκ² λ¨ κ²μ λλ€.
μ΄λ κ² νλ©΄ λμ νλ‘μ νΈμμ Redux toolkit μ μ¬μ©ν΄μ μνκ΄λ¦¬ νκΈ° μ±κ³΅ ββππ