diff --git a/HelloWorld/src/hooks/users.js b/HelloWorld/src/hooks/users.js index 24a4470f..fa91dfb1 100644 --- a/HelloWorld/src/hooks/users.js +++ b/HelloWorld/src/hooks/users.js @@ -1,11 +1,12 @@ -import {Alert} from 'react-native'; +import { Alert } from 'react-native'; import AsyncStorage from '@react-native-async-storage/async-storage'; -import {userLogin, userAuth} from '../services/users'; -import {useQuery, useMutation} from 'react-query'; +import { userLogin, userAuth } from '../services/users'; +import { useQuery, useMutation } from 'react-query'; import Global from '../global'; import conf from '../config'; +import { useSelector, useDispatch } from 'react-redux' // 登录 -export const login = ({config = {}, update, formData, remember}) => { +export const login = ({ config = {}, update, remember }) => { const mutation = useMutation({ mutationFn: userLogin, onSuccess: async data => { @@ -16,7 +17,7 @@ export const login = ({config = {}, update, formData, remember}) => { await AsyncStorage.setItem('cachPassword', formData.password); } await AsyncStorage.setItem('userData', JSON.stringify(data.data)); - update({token: data.token, userData: data.data}); + update({ token: data.token, userData: data.data }); if (Global.navigation) { Global.navigation.replace('Tab'); } @@ -30,14 +31,21 @@ export const login = ({config = {}, update, formData, remember}) => { }; // 验证token -export const useAuthToken = ({token, update}) => { +export const useAuthToken = () => { + const { token } = useSelector(state => state.global) + const dispatch = useDispatch() const mutation = useMutation({ mutationFn: userAuth, onMutate: async () => { let host = await AsyncStorage.getItem('apihost'); if (!host && conf.hosts[0]) { await AsyncStorage.setItem('apihost', JSON.stringify(conf.hosts[0])); - await update({apihost: conf.hosts[0]}); + dispatch({ + type: "global/update", + payload: { + apihost: conf.hosts[0] + } + }) } if (!token) { await AsyncStorage.removeItem('userData'); @@ -46,9 +54,21 @@ export const useAuthToken = ({token, update}) => { }, onSuccess: async data => { if (data?.token) { - await update({authState: true, token: data.token}); + dispatch({ + type: "global/update", + payload: { + token: data.token, + authState: true + } + }) } else { - await update({authState: true, token: null}); + dispatch({ + type: "global/update", + payload: { + authState: true, + token: null + } + }) } }, }); @@ -56,10 +76,17 @@ export const useAuthToken = ({token, update}) => { }; // 退出 -export const logout = ({update}) => { +export const logout = () => { + const dispatch = useDispatch() AsyncStorage.removeItem('token'); AsyncStorage.removeItem('userData'); - update({token: null, userData: null}); + dispatch({ + type: "global/update", + payload: { + token: null, + authState: null + } + }) if (Global.navigation) { Global.navigation.navigate?.('SignIn'); } diff --git a/HelloWorld/src/pages/AuthLoading/index.js b/HelloWorld/src/pages/AuthLoading/index.js index 631792d1..adc0130e 100644 --- a/HelloWorld/src/pages/AuthLoading/index.js +++ b/HelloWorld/src/pages/AuthLoading/index.js @@ -1,20 +1,20 @@ import React, { useEffect } from 'react'; import { Text, StatusBar, StyleSheet, SafeAreaView } from 'react-native'; -import { connect } from 'react-redux'; +import { useSelector } from 'react-redux'; import { Flex, Loader, H3, Icon } from '@uiw/react-native'; import Global from '../../global'; import { logoLight } from '../../components/icons/signin'; import Footer from '../../components/Footer'; import { useAuthToken } from '../../hooks/users' + const AuthLoadingScreen = ({ navigation, - update, - token, - authState, children }) => { - const { mutate, isLoading } = useAuthToken({ update, token }) + const { token, authState } = useSelector(state=>state.global) + const { mutate, isLoading } = useAuthToken() + useEffect(() => { if (navigation && Global) { Global.navigation = navigation; @@ -42,15 +42,7 @@ const AuthLoadingScreen = ({ ); } -export default connect( - ({ global }) => ({ - token: global.token, - authState: global.authState, - }), - ({ global }) => ({ - update: global.update, - }) -)(AuthLoadingScreen); +export default AuthLoadingScreen const styles = StyleSheet.create({ container: { diff --git a/HelloWorld/src/pages/Home/index.js b/HelloWorld/src/pages/Home/index.js deleted file mode 100644 index 62799d49..00000000 --- a/HelloWorld/src/pages/Home/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import {StatusBar, useColorScheme} from 'react-native'; -import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'; -import TabsScreen from '../../routes/tabs'; - -const BottomTabs = createBottomTabNavigator(); - -const DashboardScreen = props => { - const colorScheme = useColorScheme(); - const iconColor = (colorScheme && colorScheme) === 'light' ? '#000' : '#fff'; - return ( - - - - {TabsScreen({iconColor}).map((props, idx) => { - return ; - })} - - - ); -}; - -export default DashboardScreen; diff --git a/HelloWorld/src/routes/index.js b/HelloWorld/src/routes/index.js index b35f7820..c9e1c5ca 100644 --- a/HelloWorld/src/routes/index.js +++ b/HelloWorld/src/routes/index.js @@ -1,4 +1,3 @@ -import Home from '../pages/Home'; import SignIn from '../pages/SignIn'; import DevOptions from '../pages/DevOptions'; import MyHomeSetting from '../pages/MyHome/Setting'; diff --git a/template/template/src/hooks/users.js b/template/template/src/hooks/users.js index 6ba400b1..fa91dfb1 100644 --- a/template/template/src/hooks/users.js +++ b/template/template/src/hooks/users.js @@ -1,25 +1,25 @@ -import { Alert } from "react-native"; -import AsyncStorage from "@react-native-async-storage/async-storage"; -import { userLogin, userAuth } from "../services/users"; -import { useQuery, useMutation } from "react-query"; -import Global from "../global"; -import conf from "../config"; - +import { Alert } from 'react-native'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { userLogin, userAuth } from '../services/users'; +import { useQuery, useMutation } from 'react-query'; +import Global from '../global'; +import conf from '../config'; +import { useSelector, useDispatch } from 'react-redux' // 登录 -export const useLogin = ({ config = {}, update, formData, remember }) => { +export const login = ({ config = {}, update, remember }) => { const mutation = useMutation({ mutationFn: userLogin, - onSuccess: async (data) => { + onSuccess: async data => { if (data?.token && data?.data) { - await AsyncStorage.setItem("token", data.token); + await AsyncStorage.setItem('token', data.token); if (remember) { - await AsyncStorage.setItem("cachLoginName", formData.loginName); - await AsyncStorage.setItem("cachPassword", formData.password); + await AsyncStorage.setItem('cachLoginName', formData.loginName); + await AsyncStorage.setItem('cachPassword', formData.password); } - await AsyncStorage.setItem("userData", JSON.stringify(data.data)); + await AsyncStorage.setItem('userData', JSON.stringify(data.data)); update({ token: data.token, userData: data.data }); if (Global.navigation) { - Global.navigation.replace("Tab"); + Global.navigation.replace('Tab'); } } else if (data && data.message) { Alert.alert(`Login failed - ${data.error}`, data.message); @@ -31,25 +31,44 @@ export const useLogin = ({ config = {}, update, formData, remember }) => { }; // 验证token -export const useAuthToken = ({ token, update }) => { +export const useAuthToken = () => { + const { token } = useSelector(state => state.global) + const dispatch = useDispatch() const mutation = useMutation({ mutationFn: userAuth, onMutate: async () => { - let host = await AsyncStorage.getItem("apihost"); + let host = await AsyncStorage.getItem('apihost'); if (!host && conf.hosts[0]) { - await AsyncStorage.setItem("apihost", JSON.stringify(conf.hosts[0])); - await update({ apihost: conf.hosts[0] }); + await AsyncStorage.setItem('apihost', JSON.stringify(conf.hosts[0])); + dispatch({ + type: "global/update", + payload: { + apihost: conf.hosts[0] + } + }) } if (!token) { - await AsyncStorage.removeItem("userData"); - await AsyncStorage.removeItem("token"); + await AsyncStorage.removeItem('userData'); + await AsyncStorage.removeItem('token'); } }, - onSuccess: async (data) => { + onSuccess: async data => { if (data?.token) { - await update({ authState: true, token: data.token }); + dispatch({ + type: "global/update", + payload: { + token: data.token, + authState: true + } + }) } else { - await update({ authState: true, token: null }); + dispatch({ + type: "global/update", + payload: { + authState: true, + token: null + } + }) } }, }); @@ -57,11 +76,18 @@ export const useAuthToken = ({ token, update }) => { }; // 退出 -export const logout = ({ update }) => { - AsyncStorage.removeItem("token"); - AsyncStorage.removeItem("userData"); - update({ token: null, userData: null }); +export const logout = () => { + const dispatch = useDispatch() + AsyncStorage.removeItem('token'); + AsyncStorage.removeItem('userData'); + dispatch({ + type: "global/update", + payload: { + token: null, + authState: null + } + }) if (Global.navigation) { - Global.navigation.navigate?.("SignIn"); + Global.navigation.navigate?.('SignIn'); } }; diff --git a/template/template/src/pages/AuthLoading/index.js b/template/template/src/pages/AuthLoading/index.js index 631792d1..adc0130e 100644 --- a/template/template/src/pages/AuthLoading/index.js +++ b/template/template/src/pages/AuthLoading/index.js @@ -1,20 +1,20 @@ import React, { useEffect } from 'react'; import { Text, StatusBar, StyleSheet, SafeAreaView } from 'react-native'; -import { connect } from 'react-redux'; +import { useSelector } from 'react-redux'; import { Flex, Loader, H3, Icon } from '@uiw/react-native'; import Global from '../../global'; import { logoLight } from '../../components/icons/signin'; import Footer from '../../components/Footer'; import { useAuthToken } from '../../hooks/users' + const AuthLoadingScreen = ({ navigation, - update, - token, - authState, children }) => { - const { mutate, isLoading } = useAuthToken({ update, token }) + const { token, authState } = useSelector(state=>state.global) + const { mutate, isLoading } = useAuthToken() + useEffect(() => { if (navigation && Global) { Global.navigation = navigation; @@ -42,15 +42,7 @@ const AuthLoadingScreen = ({ ); } -export default connect( - ({ global }) => ({ - token: global.token, - authState: global.authState, - }), - ({ global }) => ({ - update: global.update, - }) -)(AuthLoadingScreen); +export default AuthLoadingScreen const styles = StyleSheet.create({ container: { diff --git a/template/template/src/pages/Home/index.js b/template/template/src/pages/Home/index.js deleted file mode 100644 index 62799d49..00000000 --- a/template/template/src/pages/Home/index.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import {StatusBar, useColorScheme} from 'react-native'; -import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'; -import TabsScreen from '../../routes/tabs'; - -const BottomTabs = createBottomTabNavigator(); - -const DashboardScreen = props => { - const colorScheme = useColorScheme(); - const iconColor = (colorScheme && colorScheme) === 'light' ? '#000' : '#fff'; - return ( - - - - {TabsScreen({iconColor}).map((props, idx) => { - return ; - })} - - - ); -}; - -export default DashboardScreen; diff --git a/template/template/src/routes/index.js b/template/template/src/routes/index.js index 99ecd2e1..05a76fcd 100644 --- a/template/template/src/routes/index.js +++ b/template/template/src/routes/index.js @@ -1,4 +1,3 @@ -import Home from "../pages/Home"; import SignIn from "../pages/SignIn"; import DevOptions from "../pages/DevOptions"; import MyHomeSetting from "../pages/MyHome/Setting";