2.7.3 β’ Published 7 months ago
react-pinia v2.7.3
react-pinia
π Build minimal state management for React
Installation
npm i react-pinia
Global Usage
Define data source
import { createStore } from 'react-pinia'
type HomeState = {
count: number
user: string
info: {
useName: string
password: string
}
getters: {
doubleCount: number
}
actions: {
add: (count: number) => void
}
}
type AboutState = {
num: number
}
export interface State {
home: HomeState
about: AboutState
}
const store = createStore<State>({
home: {
state: () => {
return {
count: 1,
user: 'hello',
info: {
useName: 'admin',
password: '123456',
},
}
},
getters: {
doubleCount: (state) => {
return state.count * 2
},
},
actions: {
add(count) {
console.log(this.info)
// this.count += count
// this.info.useName = 'cobill'
this.info = {
useName: 'cobill',
password: '123456789',
}
// this.user = 'world'
},
},
deep: false,
},
about: {
state: () => {
return {
num: 1,
}
},
},
})
export default store
Global Mounting
import { Provider } from 'react-pinia'
import store from '@/store'
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
root
)
Global Usage
import { useStore } from 'react-pinia'
// Import globally defined types
import { State } from '@/store/global'
const App = memo(() => {
const home = useStore<State, 'home'>('home')! // Need to pass generics and assert
return (
<section>
<p>count: {home.count}</p>
<p>doubleCount: {home.doubleCount}</p>
<p>{home.user}</p>
<button onClick={home.add}>Add</button>
</section>
)
})
export default App
Local Usage
Local usage does not require global mounting, just use it directly
// Define data source
import { defineStore } from 'react-pinia'
type State = {
count: number
user: string
getters: {
doubleCount: number
}
actions: {
add: () => void
}
}
const useStore = defineStore<State>({
state: () => {
return {
count: 1,
user: 'hello',
}
},
getters: {
doubleCount: (state) => {
return state.count * 2
},
},
actions: {
add() {
this.count += 1
},
},
// Whether to persist data
persist: {
key: 'user',
storage: 'localStorage', // 'localStorage' | 'sessionStorage' default is localStorage
},
deet: true,
})
// Use data source
import { memo } from 'react'
import useStore from './useStore'
// Use directly outside
const state = useStore().get()
const Child = memo(() => {
const { count, doubleCount, add } = useStore()
const onClick = () => {
state.count = state.count + 1
}
return (
<section>
<p>{count}</p>
<p>{doubleCount}</p>
<button onClick={add}>Add</button>
<button onClick={onClick}>Modify externally</button>
</section>
)
})
export default Child
Sponsored
Open source is not easy, with your sponsorship, we will do better π
Technical feedback and communication
WeChat: cobill2008
License
2.7.0
7 months ago
2.6.0
7 months ago
2.7.2
7 months ago
2.7.1
7 months ago
2.7.3
7 months ago
2.5.8
8 months ago
2.5.7
8 months ago
2.5.9
8 months ago
2.5.6
2 years ago
2.3.0
2 years ago
2.2.0
2 years ago
2.5.0
2 years ago
2.5.2
2 years ago
2.5.1
2 years ago
2.5.3
2 years ago
2.1.0
2 years ago
2.5.5
2 years ago
2.0.0
3 years ago
1.9.0
3 years ago
1.8.9
3 years ago
1.8.8
3 years ago
1.8.6
3 years ago
1.8.2
3 years ago
1.8.0
3 years ago
1.7.8
3 years ago
1.7.6
3 years ago
1.7.3
3 years ago
1.7.2
3 years ago
1.7.0
3 years ago
1.6.8
3 years ago
1.5.8
3 years ago
1.5.6
3 years ago
1.5.2
3 years ago
1.3.2
3 years ago
1.3.0
3 years ago
1.2.0
3 years ago
1.1.0
3 years ago
1.0.0
3 years ago