u
This commit is contained in:
1 parent
2aa2b513eb
commit
200f72eb86
7 files changed
+316
-87
No files matched your search
@@ -6,7 +6,7 @@ import { Animated, Pressable, View } from 'react-native'
|
||||
const tabItems = [
|
||||
{ name: 'finance', icon: <CircleDollarSign strokeWidth={1.5} size={24} /> },
|
||||
{ name: 'dating', icon: <Heart strokeWidth={1.5} size={24} /> },
|
||||
{ name: 'app-center', icon: <Layers strokeWidth={1.5} size={24} /> },
|
||||
{ name: 'app-center', icon: <Layers strokeWidth={2} size={28} /> },
|
||||
{ name: 'chat', icon: <MessageSquare strokeWidth={1.5} size={24} /> },
|
||||
{ name: 'profile', icon: <CircleUserRound strokeWidth={1.5} size={24} /> },
|
||||
]
|
||||
@@ -16,7 +16,7 @@ function CustomTabBar({ state, descriptors, navigation }: any) {
|
||||
const scales = useRef(tabItems.map(() => new Animated.Value(1))).current
|
||||
|
||||
return (
|
||||
<View className="flex-row justify-around bg-white border-t border-gray-200 py-2">
|
||||
<View className="flex-row justify-around bg-white">
|
||||
{state.routes.map((route: any, index: number) => {
|
||||
const item = tabItems.find(i => i.name === route.name)
|
||||
if (!item)
|
||||
@@ -49,7 +49,7 @@ function CustomTabBar({ state, descriptors, navigation }: any) {
|
||||
onPressOut={onPressOut}
|
||||
className="flex-1 items-center justify-center"
|
||||
>
|
||||
<Animated.View style={{ transform: [{ scale: scales[index] }] }} className="items-center p-2">
|
||||
<Animated.View style={{ transform: [{ scale: scales[index] }] }} className="items-center p-3">
|
||||
{React.cloneElement(item.icon, { color })}
|
||||
</Animated.View>
|
||||
</Pressable>
|
||||
|
||||
@@ -1,17 +1,42 @@
|
||||
import { StyleSheet, Text, View } from 'react-native'
|
||||
// App.tsx
|
||||
import React, { useEffect } from 'react'
|
||||
import { Button, Text, View } from 'react-native'
|
||||
import { useUserStore } from '@/store/userStore'
|
||||
|
||||
export default function App() {
|
||||
const { userInfo, token, setUserInfo, setToken, logout } = useUserStore()
|
||||
|
||||
// 模拟 App 启动后读取状态
|
||||
useEffect(() => {
|
||||
console.log('用户信息:', userInfo)
|
||||
console.log('Token:', token)
|
||||
}, [userInfo, token])
|
||||
|
||||
export default function Tab() {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text>Tab [Credit]</Text>
|
||||
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
||||
<Text>
|
||||
User Info:
|
||||
{userInfo ? userInfo.username : '未登录'}
|
||||
</Text>
|
||||
<Text>
|
||||
Token:
|
||||
{token || '无'}
|
||||
</Text>
|
||||
|
||||
<Button
|
||||
title="登录"
|
||||
onPress={() => {
|
||||
setUserInfo({ userId: '1', username: '张三' })
|
||||
setToken('abc123')
|
||||
}}
|
||||
/>
|
||||
|
||||
<Button
|
||||
title="退出登录"
|
||||
onPress={() => {
|
||||
logout()
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,31 @@
|
||||
// store/userStore.ts
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage'
|
||||
import { create } from 'zustand'
|
||||
import { createJSONStorage, persist } from 'zustand/middleware'
|
||||
|
||||
interface UserState {
|
||||
userInfo: { userId: string, username: string } | null
|
||||
token: string | null
|
||||
setUserInfo: (userInfo: UserState['userInfo']) => void
|
||||
setToken: (token: string) => void
|
||||
logout: () => void
|
||||
}
|
||||
|
||||
export const useUserStore = create<UserState>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
userInfo: null,
|
||||
token: null,
|
||||
setUserInfo: userInfo => set({ userInfo }),
|
||||
setToken: token => set({ token }),
|
||||
logout: () => {
|
||||
console.log('当前 token:', get().token) // 使用 get 获取最新状态
|
||||
set({ userInfo: null, token: null })
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: 'user-storage', // 存储在 AsyncStorage 的 key
|
||||
storage: createJSONStorage(() => AsyncStorage),
|
||||
},
|
||||
),
|
||||
)
|
||||
Reference in new issue
Block a user