How to use env file?
How to control network communication?
Setup react-query
yarn add react-query
import React from 'react'
import Home from './src/screens/Home'
import { QueryClient, QueryClientProvider } from 'react-query'
export default function App() {
const queryClient = new QueryClient()
return <QueryClientProvider client={queryClient}><Home /></QueryClientProvider>
}
Rest with axios
- Create axios instance
const axiosInstance = axios.create({
baseURL: API_BASE_URL,
timeout: 10000,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
},
});
- Create api request with Promise or Await
reference:
export const fetchData = (authApiUrl) => {
const promise = new Promise((resolve, reject) => {
const success = (response) => {
resolve(response);
};
const fail = (error) => {
reject(error);
};
axiosInstance.get(authApiUrl)
.then(success)
.catch(fail);
});
return promise;
};
export const fetchData = async (authApiUrl) => {
const response = await axiosInstance.get(authApiUrl)
return response
};
Usage
import React from 'react'
import { fetchData } from '../../network'
import { useQuery } from 'react-query'
export default function Home() {
let test
const { data, isLoading } = useQuery(
['fetchData', 'dataType'],
() => fetchData(dataType)
)
if (isLoading) {
test = 'Loading...'
}
if (data) {
test = data[0].name
}
return (
<Text>{test}</Text>
);
}
Debug with Flipper
- Open Setup Doctor to see if configuration is correct
- Open File > Preferences to setup Android SDK location if it’s invalid
- Path needs to be abosulte path
~/Library/Android/sdkWrong
/Users/hung/Library/Android/sdk Right
- Path needs to be abosulte path
- Then, add Network plugin
How to control navigation?
Use react-navigation
Setup
yarn add @react-navigation/native
yarn add @react-navigation/native-stack
Expo
expo install react-native-screens react-native-safe-area-context
Usage
routing/index.js
import React from 'react'
import { NavigationContainer } from '@react-navigation/native'
import { MainStack } from './components/MainStack'
const Routing = () => {
return (
<NavigationContainer>
<MainStack />
</NavigationContainer>
)
}
export default Routing
routing/components/MainStack.js
import React from 'react'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import Home from '../../screens/Home'
const Stack = createNativeStackNavigator();
const MainStack = () => {
return <Stack.Navigator>
<Stack.Screen name="Home" component={Home} />
</Stack.Navigator>
}
export default MainStack
react-native-screens
- This package is installed with react-navigation v5, v6
- This helps to improve performance of the app, if there is bug relating to this, you can turn it off in root file
import { enableScreens } from 'react-native-screens'
if (!IS_ANDROID) {
enableScreens(false)
}
How to manage app state?
Use redux and redux-toolkits
Leave a Reply