How to realize data response by Vue provide inject
						
							
 an example is given on the official website, saying that it does not support responsive data, but responsive data can be passed in, so provide,inject can implement responsive data. 
 I should understand it correctly here. Ha 
  
 
 the demo, I wrote myself made the following changes 
 parent page: 
  export default {
        provide(){
         return   {foo:this.fonnB}
        },
        data(){
          return {fonnB:"old word"}   
        }
         created() {
          setTimeout(()=>{
            this.fonnB="new words";    // foonBfoo
            this._provided.foo="new words"; 
            // foofoo  old words
            console.log( this._provided)
          },1000)
        },
        
      }
 child page: 
     export default {
        inject:["foo"],
        data(){
          return {chilrfoo:this.foo}   
        }    
      }
      
     2this.foo
     
						 
												
					 
					
						
 the following changes have been made to achieve the parent component change, and the following grandchild components can update the data. In this way, a responsive data is passed in. If you need two-way data, you need to manually write the set function in the computed of the child page. Computed itself is only equivalent to a get function. 
 it is worth noting that childfooOld does not respond in the data data of the child page. If the form of childfooOld=this.foo and obj here is also responsive, then an is also responsive data. 
 if the single data format cannot respond, there is no set/get under childfooOld only when the set/get under data controls the change of attributes under data, not by this.foo.a. 
 parent page: 
 export default {
    provide(){
     return   {foo:this.fonnB}
    },
    data(){
      return {
      fonnB:{a:'old word'}
      }   
    }
     created() {
      setTimeout(()=>{
        this.fonnB.a="new words";    
      
        // foofoo  old words
       
      },1000)
    },
    
  }
 child page: 
 export default {
    inject:['foo'],
    data(){
      return {
       childfooOld:this.foo.a
      }   
    },
    computed:{
        chilrfoo(){
            return  this.foo.a
        }
    }    
  }
 the source code for prodive and inject is as follows 
 export function initInjections (vm: Component) {
 const result = resolveInject (vm.$options.inject, vm) 
 if (result) {
observerState.shouldConvert = false
Object.keys(result).forEach(key => {
  defineReactive(vm, key, result[key])
})
observerState.shouldConvert = true
} 
} 
 you can see that prodive also uses the defineReactive function and adds its own set,get function, which is also responsive data, as shown in the following figure 
.
 
 inject set/getinject set/get
export function resolveInject (inject: any, vm: Component): ?Object {
  if (inject) {
}
}
 
 
 upload values up and down through computed 
 of course, you can bind the data attribute directly, but you cannot bind a single data 
.
  A code just found  https://jsfiddle.net/Linusbor.