由于 [email protected] 中引入了 app.unmodel 以及为 app.model 增加了冲突校验,不允许对相同的 namespace 注册多次 model,而动态加载路由需要多次执行 app.model,所以很多人升级到 1.2 时就出错了。

在 router.js 里用一个辅助方法注册 model 。
const cached = {};
function registerModel(app, model) {
if (!cached[model.namespace]) {
app.model(model);
cached[model.namespace] = 1;
}
}
使用
registerModel(app, require('./models/users'));
https://github.com/dvajs/dva-example-user-dashboard/commit/df2a7a0e1e7295840cfd2032a677f5e69c968c8a
@sorrycc 使用辅助方法注册 model,在react-native 下(非动态加载)还是有问题。
android系统,点击返回键退出系统,重新进行系统就会报#465的问题。
@rendongsc model 是动态载入的吗? 重新进入系统为啥只执行 app.model 的代码呢?
不是动态载入的,重新进入系统为什么要再次执行app.model原因不清楚。
const cached = {};
function registerModel(app, model) {
if (!cached[model.namespace]) {
app.model(model);
cached[model.namespace] = 1;
}
}
const app = dva();
app.use(createLoading());
registerModel(app, Auth);
registerModel(app, Initial);
registerModel(app, Cooperate);
registerModel(app, Mail);
registerModel(app, Infomation);
app.router(() => <Router />);
export default app;
可以先加 try...catch 解决这个问题,有时间可以研究下为啥执行多次。
function registerModel(app, model) {
try {
app.model(model);
} catch(e) {}
}
我这边报错是因为注册代码写了两次,
app.model(require("./models/users"));
// 2. Plugins
// app.use({});
app.use(createLoading());
// 3. Model
// app.model(require('./models/example'));
app.model(require('./models/users'))
@sorrycc 老师,想问下根据路由动态加载路由和在index.js上同时加载,性能相差会很大吗
@AsceticBoy 项目大的话会相差比较大,因为下载时间长了。
@sorrycc 大叔,我想请教一个问题:
比如我Main.js 内容如下
render() {
return (
<Header />
// 动态显示页面router
<Bottom/>
)
}
这个Main.js只是一个公共容器,包含公共的头部组件和底部组件,我需要在中间去动态的加载不同
页面的router请问该如何实现?还是说得另外建一个新的文件包含以上结构,然后在其中添加我所需要
加载页面的router ? 有没有这样一个动态加载页面router的方法,公用这一个Main.js的结构?
model.call(this, {
namespace: '@@dva',
state: 0,
reducers: {
UPDATE: function UPDATE(state) {
return state + 1;
}
}
});
Android 的 notify 进入 app ,这个 internal 的 namespace 无论如何都会被 inject, 因为 checkmodel 的原因,crash
这个外部还没有太好的办法 workaround
@sorrycc
@buhe 能否提供一个最小可复现代码 demo? 什么情况下会重复调用 app.start() ?
所以现在这问题还是依旧吗?
function registerModel(app, model) {
try {
app.model(model);
} catch(e) {}
}
而不建议使用
const cached = {};
function registerModel(app, model) {
if (!cached[model.namespace]) {
app.model(model);
cached[model.namespace] = 1;
}
}
是这么理解吗?
Most helpful comment
我这边报错是因为注册代码写了两次,
app.model(require("./models/users"));
// 2. Plugins
// app.use({});
app.use(createLoading());
// 3. Model
// app.model(require('./models/example'));
app.model(require('./models/users'))