2.7.3 β’ Published 10 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
10 months ago
2.6.0
10 months ago
2.7.2
10 months ago
2.7.1
10 months ago
2.7.3
10 months ago
2.5.8
11 months ago
2.5.7
11 months ago
2.5.9
11 months ago
2.5.6
2 years ago
2.3.0
3 years ago
2.2.0
3 years ago
2.5.0
3 years ago
2.5.2
3 years ago
2.5.1
3 years ago
2.5.3
3 years ago
2.1.0
3 years ago
2.5.5
3 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