|
@@ -1,6 +1,8 @@
|
|
|
/* @flow */
|
|
/* @flow */
|
|
|
|
|
|
|
|
import { hasSymbol } from 'core/util/env'
|
|
import { hasSymbol } from 'core/util/env'
|
|
|
|
|
+import { warn } from '../util/index'
|
|
|
|
|
+import { defineReactive } from '../observer/index'
|
|
|
|
|
|
|
|
export function initProvide (vm: Component) {
|
|
export function initProvide (vm: Component) {
|
|
|
const provide = vm.$options.provide
|
|
const provide = vm.$options.provide
|
|
@@ -29,7 +31,18 @@ export function initInjections (vm: Component) {
|
|
|
let source = vm
|
|
let source = vm
|
|
|
while (source) {
|
|
while (source) {
|
|
|
if (source._provided && provideKey in source._provided) {
|
|
if (source._provided && provideKey in source._provided) {
|
|
|
- vm[key] = source._provided[provideKey]
|
|
|
|
|
|
|
+ if (process.env.NODE_ENV !== 'production') {
|
|
|
|
|
+ defineReactive(vm, key, source._provided[provideKey], () => {
|
|
|
|
|
+ warn(
|
|
|
|
|
+ `Avoid mutating a injections directly since the value will be ` +
|
|
|
|
|
+ `overwritten whenever the provided component re-renders. ` +
|
|
|
|
|
+ `injections being mutated: "${key}"`,
|
|
|
|
|
+ vm
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ defineReactive(vm, key, source._provided[provideKey])
|
|
|
|
|
+ }
|
|
|
break
|
|
break
|
|
|
}
|
|
}
|
|
|
source = source.$parent
|
|
source = source.$parent
|