Skip to content

Commit

Permalink
feat: 集成 zustand 状态管理
Browse files Browse the repository at this point in the history
  • Loading branch information
QingyunYang committed Aug 22, 2022
1 parent fdcaede commit 7140b1a
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 40 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
"react-error-boundary": "^3.1.4",
"react-query": "^3.39.2",
"react-redux": "^8.0.2",
"zustand": "^4.0.0"
"zustand": "^4.1.1"
},
"devDependencies": {
"@babel/core": "^7.17.12",
Expand Down
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 3 additions & 6 deletions src/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@ import type { FC, PropsWithChildren } from 'react'

import { AppLayout } from '@/layouts/AppLayout'
import { QueryProvider } from '@/providers/QueryProvider'
import { ZustandProvider } from '@/providers/ZustandProvider'

import './app.css'

const App: FC<PropsWithChildren<{}>> = ({ children }) => (
<QueryProvider>
<ZustandProvider>
<StrictMode>
<AppLayout>{children}</AppLayout>
</StrictMode>
</ZustandProvider>
<StrictMode>
<AppLayout>{children}</AppLayout>
</StrictMode>
</QueryProvider>
)

Expand Down
Empty file added src/providers/.gitkeep
Empty file.
15 changes: 0 additions & 15 deletions src/providers/ZustandProvider/createStore.ts

This file was deleted.

12 changes: 0 additions & 12 deletions src/providers/ZustandProvider/index.tsx

This file was deleted.

43 changes: 41 additions & 2 deletions src/sub-packages/state-management/zustand/App.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,47 @@
import type { FC } from 'react'
import { View, Text } from '@tarojs/components'
import { View, Text, Button } from '@tarojs/components'
import { useCounterStore } from './hooks/useCounterStore'

const Increment: FC = () => {
const { value, increment } = useCounterStore()
return (
<>
<Text>{value}</Text>
<Button className="mt-2" onClick={increment}>
+
</Button>
</>
)
}

const Decrement: FC = () => {
const { value, decrement } = useCounterStore()
return (
<>
<Text className="mt-2">{value}</Text>
<Button className="mt-2" onClick={decrement}>
-
</Button>
</>
)
}

const IncrementByAmount: FC = () => {
const { value, incrementByAmount } = useCounterStore()
return (
<>
<Text className="mt-2">{value}</Text>
<Button className="mt-2" onClick={() => incrementByAmount(3)}>
+3
</Button>
</>
)
}

export const App: FC = () => (
<View className="flex h-screen flex-col items-center justify-center">
<Text>zustand</Text>
<Increment />
<Decrement />
<IncrementByAmount />
</View>
)
29 changes: 29 additions & 0 deletions src/sub-packages/state-management/zustand/hooks/useCounterStore.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import create from 'zustand'
import { persist } from 'zustand/middleware'
import { getStorageSync, setStorageSync, removeStorageSync } from '@tarojs/taro'

interface CounterState {
value: number
increment: () => void
decrement: () => void
incrementByAmount: (payload: number) => void
}

export const useCounterStore = create(
persist<CounterState>(
(set) => ({
value: 0,
increment: () => set((state) => ({ value: state.value + 1 })),
decrement: () => set((state) => ({ value: state.value - 1 })),
incrementByAmount: (payload: number) => set((state) => ({ value: state.value + payload })),
}),
{
name: 'zustand/persist/counter',
getStorage: () => ({
getItem: getStorageSync,
setItem: setStorageSync,
removeItem: removeStorageSync,
}),
},
),
)

0 comments on commit 7140b1a

Please sign in to comment.