728x90
반응형
구성
Action
- testAction
- notiAction
Reducer
- notiReducer
- rootReducer
store
type
store.js
import { configureStore } from '@reduxjs/toolkit'
import rootReducer from './Reducers/rootReducer'
// 미들웨어가 필요한경우 참고
// https://react.vlpt.us/redux-middleware/
const store = configureStore({
reducer:{
rootReducer
}
})
export default store;
types.js
export default types = {
TEST_ :"TEST",
NOTIFICATION_ : "NOTI"
}
rootReducer.js
import { combineReducers } from "redux"
// 하위 리듀서들 정의
import test from './test'
import notiReducer from './notiReducer'
/*
connect 는
import { useSelector, useDispatch } from 'react-redux'; 을 사용하면서 사용하지 않게 되엇다.
// redux 내의 state 가지고 오기
const reduxValue = useSelector(state => {console.log("state",state)})
// action 호출
const dispatch = useDispatch();
ex) dispatch(액션함수(파라미터))
*/
export default combineReducers({
test,
notiReducer
})
notiReducer.js
import types from "../types";
const initialState = {
TestValue: "TEST",
notiValue: false
}
export default function notiReducer(state = initialState, action) {
// console.log("notiReducer _ action.type => ", action.type)
switch (action.type) {
case types.NOTIFICATION_:
return {
...state,
notiValue: action.payload
};
case types.TEST_:
console.log("types.TEST")
return {
state
}
default: {
return state
}
}
}
notiAction.js
import types from "../types";
/* 액션 생성함수 만들기
// 액션 생성함수를 만들고 export 키워드를 사용해서 내보내주세요.
export const setDiff = diff => ({ type: SET_DIFF, diff });
export const increase = () => ({ type: INCREASE });
export const decrease = () => ({ type: DECREASE }); */
export function setNoti(payload){
console.log("setNoti")
return {
type: types.NOTIFICATION_,
payload
}
}
export function test(){
console.log("test")
return{
type : types.TEST_,
}
}
App.js
=> store 등록
import React, { useEffect } from 'react';
import {NavigationContainer} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import {Provider} from 'react-redux';
import { LogBox } from 'react-native';
import store from './src/Redux/store';
import SplashScreen from './src/Screen/Navigator/SplashScreen';
import MainScreen from './src/Screen/Navigator/MainScreen';
import ConnectScreen from './src/Screen/Navigator/ConnectScreen';
const Stack = createNativeStackNavigator();
LogBox.ignoreLogs(['Non-serializable values were found in the navigation state','Remote debugger']);
const App = () => {
return (
<Provider store={store}>
<NavigationContainer>
<Stack.Navigator
screenOptions={{
headerShown: false,
}}
>
<Stack.Screen name="SplashScreen" component={SplashScreen} />
<Stack.Screen name="ConnectScreen" component={ConnectScreen} />
<Stack.Screen name="MainScreen" component={MainScreen} />
</Stack.Navigator>
</NavigationContainer>
</Provider>
);
};
export default App;
사용예시
action 호출
import {setNoti,test} from '../../Redux/Actions/notiAction'
import {useSelector, useDispatch } from 'react-redux'
// Action 함수를 호출 하기 위함
const dispatch = useDispatch();
function btnClickEvent(){
ToastAndroid.show("비상 호출",ToastAndroid.SHORT)
// Action 함수 호출
dispatch(setNoti(true))
}
값 호출
=> 변경 될때마다 저 값이 바뀜.
const value = useSelector(state=>(state.rootReducer.notiReducer.notiValue))
728x90
반응형
'Redux' 카테고리의 다른 글
리덕스 사용예제 2 (0) | 2020.08.15 |
---|---|
리덕스 사용예제 1 (0) | 2020.08.15 |
Redux 업데이트 (0) | 2020.08.15 |
리덕스란 (0) | 2020.01.29 |