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.

MySQL Query : SELECT * FROM `codeshelper`.`v9_news` WHERE status=99 AND catid='6' ORDER BY rand() LIMIT 5
MySQL Error : Disk full (/tmp/#sql-temptable-64f5-1b3a5c8-2c21f.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
MySQL Errno : 1021
Message : Disk full (/tmp/#sql-temptable-64f5-1b3a5c8-2c21f.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
Need Help?