dva框架学习问题记录

  1. ant-design 的 date 相关组件的数据是 moment 格式。参见,moment.js 。一般格式转成 moment 是 moment(Date.now())。moment 格式转成一般格式是:
获取时间戳 : var res = moment(Date.now(), 'YYYY-MM-DD HH:mm:ss').valueOf();

获取格式时间: var res = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');

// 对于时间的转换需要指定格式
var time = moment('12:21:12', 'HH:mm:ss')
  1. 在 model 的 reducers 中能不能再调用 reducer?答案:经实验,不能。
  2. 在 model 的 effects 中能不能再调用 effect?答案:能。
    dva中effect内调用另一个effect的,实现put阻塞式调用的方法
  3. proxy 代理优先级问题
    很难说这是 dva 的问题还是 webpack 的问题。总之,如果已经匹配到了代理路径,那么就不会再检查后面的代理。比如:’/api’ 这条规则在 ‘/apiV2’ 前面,那么,后面一条将不会生效,因为 ‘/api’ 已经满足匹配条件了。当然,这只是今天的观测结果,没有进行严格验证。
  4. 无法配置 svg-sprite-loader 的问题
    在 webpack.config.js 里面,可以拿到 webpack 配置对象。
module.exports = function (webpackConfig, env) {
    webpackConfig.module.rules.push({
        test: /\.svg$/,
        include: resolve('src/assets/svgs'),
        use: [
            {
                loader: 'svg-sprite-loader',
                options: {
                    symbolId: 'icon-[name]',
                }
            }
        ]
    })
}

但是,仅仅这样配置是不生效的。需要将默认配置里有关 svg 配置排除掉我们放图标的文件夹。可是,打印出 webpackConfig.module.rules 后,我并没有发现和 svg 有关的配置。后来几经折腾,找到一个配置项,rules[1] 里并没有 test 选项,但有 exclude 选项,并且使用了 url-loader。我想,应该就是这个了。将图标目录 push 到 exclude 选项中,果然成功了。SvgIcon 组件终于可以拿到需要的 svg 图标了。

  1. put 需要使用 yield 关键字,否则不生效
  2. put 是非阻塞的,为了使用 yield 获取到 resolve 的结果,需要用 put.resolve 或者 putResolve。前者是旧版本,后者是新版本。