use-rematch-model
v1.0.0-1
Published
> dynamic load rematch model
Downloads
17
Maintainers
Readme
use-rematch-model
dynamic load rematch model
NOTE: [email protected] based on @rematch/core; [email protected] based on @rematch2/core;
how it works?
just use rematchstore.model in react hooks
features
- support dynamic load rematch model with
hooks - support dynamic load rematch model with
hooks and model.name
useage
checkout example
config store
import { init } from '@rematch/core'
import { config } from 'use-rematch-model'
const store = init({
models: {
globalModel
}
})
config.store = storedynamic load model
// rematch model named about
export type State = number
export const about = {
name: 'about',
state: 0,
reducers: {
increment: (state: State) => state + 1,
},
effects: {
async incrementAsync(this: any) {
this.increment()
},
},
}
import React from 'react'
import { useRematchModel } from 'use-rematch-model'
import { about } from './models/about'
export default () => {
const [state, dispatch] = useRematchModel(about)
const handleClick = () => dispatch.increment()
return (
<div onClick={handleClick}>
about {state}
</div>
)
}use about in any fc component
import React from 'react'
import { useRematchModel } from 'use-rematch-model'
export const Counter = () => {
const [state] = useRematchModel('about') // or useRematchModel(about)
return (
<span>add {state}</span>
)
}Q&A
useRematchModel(about)vsuseRematchModel('about')
useRematchModel(about)in many components, about-model will be loaded by rematch if about-model did not exit in rematch models. if about-model already exit in rematch models, behave same asuseRematchModel('about')useRematchModel('about')will get state and dispatch from redux-store
- how to imporve type intellience for
useRematchModel('about'). You need overwrite defaultState and Dispatchtypes intypings.d.ts
import { ExtractRematchStateFromModels, ExtractRematchDispatchersFromModels } from '@rematch/core'
declare module 'use-rematch-model/default' {
export interface DynamicRootState extends ExtractRematchStateFromModels<typeof import('./src/store/dynamic-models')> {}
export interface DynamicRootDispatch extends ExtractRematchDispatchersFromModels<typeof import('./src/store/dynamic-models')> {}
}