const action = {
type:'name/@fetch',
payload:data
}
const effects = modelx.getEffects()
const myThunk = (store) => (next) => (action) => {
let typeArr = action.type.split('/')
let isEffect = [typeArr][1].includes('@')
let name = typeArr[0]
let method = typeArr[1]
if(isEffect){
return effects[name][method](store.dispatch,store.getState(),action.payload)
}
next(action)
}
let name = 'user'
let state = {
age: 1
}
effects = {
effectsA: async(dispatch, state,payload) => {
dispatch({type:'global/fetch',payload: true})
const res = await fetch('xx')
}
}
reducers = {
changeAge: (state,payload) => {
return{
...state,
age: payload.age
}
}
}
export{ name,state,effects,reducers}
import reducers from './reducers.js'
let currentReducers = {}
let currentEffects = {}
let states = {}
const add = (model) => {
const name = model.name
const state = model.state
const reducer = model.reducer
const effect = model.effect
if(states[name]) throw('不要重复命名...')
currentReducers[name] = reducers
currentEffects[name] = effects
states[name] = state
Object.keys(effects).map(item => {
currentEffects[name][`@${item}`] = effects[item]
})
}
// 这里的stateshishi
const reducers = (state,action) => {
let type = action.type
let payload = action.payload
let typeArr = type.split('/')
let name = typeArr[0]
let method = typeArr[1]
let data = currentReducers[name][method](state[name],payload)
let res = {...state}
res[name] = data
return res
}
const getState = () => states
const getEffects = () => effects
export{
add,
getEffects,
getState,
reducers
}