Vue data changes but does not render

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>

<div id="app">
  {{message}}

   <blog-post  v-if="show" :count="message"></blog-post>
  <button @click="showfun()">show</button>
  <button @click="add()">add</button> </div>
</div>

<script>

Vue.component("blog-post", {
   props: ["count"],
  template: "<div> {{count}}   </div>",
   
})


new Vue({
  el: "-sharpapp",
  data: {
    message: {
         
    },
    show:false
  },
  methods:{
    showfun(){ 
        //this.message={data:1}     //1   add
        this.message.data=1;        //2   add
        this.show=true;
    },
    add(){
        this.message.dataPP;
        console.log(this.message);
    }
  }
})
</script>

confusion: using code 2, you can clearly see that the message has changed in the add method, and the subcomponents have rendered after the show, but why the add method can"t see the rendering of the updated data.
is there any reasonable explanation

Dec.20,2021

 data: {
    message: {
        data:undefined 
    },
    show:false
  },
  

this is fine, because js cannot listen to your new properties, you can only listen to modify them, unless you specify the relevant properties in the first place, even if it is undefined.

or you can use the specified api to add properties, such as

  https://cn.vuejs.org/v2/api/-sharp.

Menu