Browse Source

规范化选项修改

HcySunYang 7 years ago
parent
commit
f580cd1e63
1 changed files with 0 additions and 40 deletions
  1. 0 40
      note/4Vue选项的规范化.md

+ 0 - 40
note/4Vue选项的规范化.md

@@ -334,9 +334,6 @@ function normalizeProps (options: Object, vm: ?Component) {
     for (const key in props) {
       val = props[key]
       name = camelize(key)
-      if (process.env.NODE_ENV !== 'production' && isPlainObject(val)) {
-        assertPropObject(name, val, vm)
-      }
       res[name] = isPlainObject(val)
         ? val
         : { type: val }
@@ -465,9 +462,6 @@ if (Array.isArray(props)) {
   for (const key in props) {
     val = props[key]
     name = camelize(key)
-    if (process.env.NODE_ENV !== 'production' && isPlainObject(val)) {
-      assertPropObject(name, val, vm)
-    }
     res[name] = isPlainObject(val)
       ? val
       : { type: val }
@@ -503,40 +497,6 @@ res[name] = isPlainObject(val)
 
 这样就实现了对纯对象语法的规范化。
 
-另外在被规范化之前,还对 `props` 进行了有效性的校验,我们知道一个对象形式的 `props` 的有效属性有四个,分别是:`type`、`default`、`required` 以及 `validator`。对于其他属性都是无效的,所以这里做了一层校验,使用如下这段代码:
-
-```js
-if (process.env.NODE_ENV !== 'production' && isPlainObject(val)) {
-  validatePropObject(name, val, vm)
-}
-```
-
-在非生产环境下,并且必须是对象形式的 `props` 才会去校验,其校验的方式是调用 `validatePropObject` 函数,该函数就定义在 `normalizeProps` 函数的下面,源码如下:
-
-```js
-/**
- * Validate whether a prop object keys are valid.
- */
-const propOptionsRE = /^(type|default|required|validator)$/
-
-function validatePropObject (
-  propName: string,
-  prop: Object,
-  vm: ?Component
-) {
-  for (const key in prop) {
-    if (!propOptionsRE.test(key)) {
-      warn(
-        `Invalid key "${key}" in validation rules object for prop "${propName}".`,
-        vm
-      )
-    }
-  }
-}
-```
-
-首先定义了一个包含所有有效属性的正则 `propOptionsRE`,然后其校验的方式就是使用 `for in` 遍历对象形式的 `props` 的所有属性,并使用 `propOptionsRE` 正则去匹配属性名,如果结果为假,则使用 `warn` 函数给出一个提示。为什么要这么做呢?是因为我们在开发程序的时候,难免会有拼写错误的情况,比如把 `type` 写成了 `typo`,这个时候如果没有错误提示,我们是很难定位错误的。有了这层校验,就能够很好的避免这类问题,节省没必要的时间开销。
-
 最后还有一个判断分支,即当你传递了 `props` 选项,但其值既不是数组又不是纯对象的时候,则会给你一个警告:
 
 ```js