This is an essential example to build React-native app using Typescript and Redux Thunk.
Step to run
- Clone the repo
yarn install
ORnpm install
react-native eject
react-native run-ios
ORreact-native run-android
Define actions
import IAction from './IAction'
import { dealService } from "../../service/deal/DealService"
import UtilAction from "../action/UtilAction"
export default class AppAction {
public static readonly GET_DEALS: string = 'AppAction.GET_DEALS'
public static readonly DEALS_LOADED: string = 'AppAction.DEALS_LOADED'
public static readonly SHOW_DEAL_LIST: string = 'AppAction.SHOW_DEAL_LIST'
public static readonly SHOW_DEAL_DETAIL: string = 'AppAction.SHOW_DEAL_DETAIL'
public static getDeals = (searchTerm: string | ''): any => {
return async (dispatch: any, ) => {
try {
dispatch ({
type: AppAction.GET_DEALS,
payload: searchTerm
})
let data = await dealService.searchData(searchTerm)
dispatch ({
type: AppAction.DEALS_LOADED,
data: data
})
}
catch (_) {
dispatch ({
type: UtilAction.ERROR,
errorMessage: "Cannot load deals"
})
}
}
}
public static setCurrentDeal = (dealId: string): IAction<string, void> => {
return {
payload: dealId,
type: AppAction.SHOW_DEAL_DETAIL
}
}
public static unsetCurrentDeal = (): IAction<void, void> => {
return {
type: AppAction.SHOW_DEAL_LIST
}
}
}
Define reducer
import AppState from "../state/AppState"
import { iDataState } from "../state/IState"
import IAction from "../action/IAction"
import AppAction from "../action/AppAction"
import { Deals } from "../../model/deal/Deal"
import UtilAction from "../action/UtilAction"
export default class AppReducer {
private static readonly _initialState: AppState = {
deals: [],
searchTerm: "",
currentDealId: null,
state: iDataState.initial,
errorMessage: ""
}
public static reducer(state: AppState = AppReducer._initialState, action: IAction<any, Deals>): AppState {
switch (action.type) {
case AppAction.GET_DEALS:
return {
...state,
state: iDataState.loading,
searchTerm: action.payload,
errorMessage: ""
}
case AppAction.DEALS_LOADED:
return {
...state,
deals: action.data !== null ? action.data!: [],
state: iDataState.loaded,
errorMessage: ""
}
case AppAction.SHOW_DEAL_LIST:
return {
...state,
state: iDataState.loaded,
currentDealId: null
}
case AppAction.SHOW_DEAL_DETAIL:
return {
...state,
currentDealId: action.payload,
state: iDataState.loading,
errorMessage: ""
}
case UtilAction.ERROR:
return {
...state,
state: iDataState.error,
errorMessage: action.error
}
default:
return state
}
}
}
If you see any issue, please do not hesitate to create an issue here or can contact me via email cao.trung.thu@gmail.com or Linkedin
Thanks
references