在Taro2工程中使用DVA
操作步骤
-
创建官方脚手架工程,本文选的默认,没有选redux;
-
安装DVA相关依赖:
npm i redux @tarojs/redux @tarojs/redux-h5 redux-logger redux-thunk dva-core dva-loading
- 安装其他依赖:
npm i
- 在
src/app.tsx
同级增加dva.ts
:
import Taro from '@tarojs/taro'
import { create } from 'dva-core'
// import { createLogger } from 'redux-logger'
import createLoading from 'dva-loading'
let app, store, dispatch, registered
function createApp(options?: any) {
const { models } = options
// if (process.env.NODE_ENV === 'development') {
// options.onAction = [createLogger()]
// }
app = create({
...options
})
app.use(createLoading({}))
// 适配支付宝小程序
if (Taro.getEnv() === Taro.ENV_TYPE.ALIPAY) {
global = {};
}
if (!global.registered) models.forEach((model) => app.model(model))
global.registered = true
app.start()
store = app._store
app.getStore = () => store
dispatch = store.dispatch
app.dispatch = dispatch
global.store = store
return app
}
export default {
createApp,
getDispatch() {
return app.dispatch
}
}
- 在
src/pages/index
目录下,创建model.ts
:
export interface HomeModelState {
}
const HomeModel = {
namespace: 'home',
state: {
},
effects: {
},
reducers: {
save(state, { payload }) {
return {
...state,
...payload,
}
}
},
}
export default HomeModel
- 在
src
目录下建立models
目录,并创建index.ts
:
import home from '../pages/index/model'
export default [
home,
]
建议在src/models
下放公用的model文件,其他分别放在页面目录,并在这个入口文件index.ts
里导入进来。
- 修改
src
目录下的app.tsx
:
import { Provider } from '@tarojs/redux'
import dva from './dva'
import models from './models/index'
const dvaApp = dva.createApp({
initialState: {},
models: models
});
const store = dvaApp.getStore();
上面是要增加的代码;
...
render () {
return (
<Provider store={store}>
<Index />
</Provider>
)
}
...
如上,就在render
里的<Index />
外包裹Provider
就好。
自此,Taro 2的工程引入Dva完成。
本文适用于Taro 1.x.x 和 2.x.x,亲测没问题。