I'm a beginner trying to get my app to pass props that set CSS styles down a chain to child components. I have a listener that checks for view port size, and as the window gets resized, it checks past a certain point and then swaps the css class and passes it down the chain..
I think I may be doing something incorrectly because my child components don't seem to be receiving the new styles and aren't updating in the DOM as I drag the window.
Here is my code.. I removed irrelevant code to make it easier to read:
Page_Listings.vue
    <template>
      <main>
        <section>
        <ListingRack 
          :prp_classes="rackClass" 
        />
        </section>
      </main>
    </template>
    
    <script>
    import ListingRack from './Listing__Rack.vue';
    export default {
      name: 'Front_Page__Panel',
      data() {
        return {
          viewportWidth: window.innerWidth
        }
      },
      methods: {},
      mounted() { window.onresize = () => this.viewportWidth = window.innerWidth },
      components: {ListingRack},
      },
      computed: {
        rackClass: function(){
          let theValue;
          console.log('>> viewport width is now: ',this.viewportWidth)
          if(this.viewportWidth > 1200) { 
              theValue = "grid_view"; 
              console.log('>> grid view')
            }
          else { 
              theValue = 'card_view'; 
              console.log('>> card view') 
          }
          return theValue
        }
      }
    }
    </script>
Listing__Rack.vue
    <template>
      <div class="listing_rack" :class="classes">
        <ul>
            <li v-for="item in listings" :key="item.postId"> 
                // I removed irrelevant code for hte sake of simplicity in this example. 
                // listings is a GraphQL returned array of data that generates a list of "listings".
                  <Listing 
                    :prp_classes=classes
                  />
            </li>
          </ul>
      </div>
    </template>
    
    <script>
    
    import Listing from './Listing.vue'
    
    export default {
      name: 'listing__rack',
      data() {
        return {
          posts: [], // what we get from the database.
          listings: [], // what we copy from the database.
          classes: this.prp_classes
        }
      },
      props: {
          prp_classes: String
      },
      components: {
        Listing
      },
      watch: {
       classes: function(){
         //just to check if we're receiving anything...
         console.log(">> [Listing_Rack](watch)(classes) there was a change to classes!");
       }
      }
    }
    </script>
Listing.vue
    <template>
       <div :id=id 
       :class=classes
       class="listing"
       :style="backgroundStyle"
       >
      </div>
    </template>
    
    <script>
    export default {
      name: 'Listing',
      data() {
        return {
          classes: this.prp_classes,
          backgroundStyle: String
        }
      },
      props: {
        prp_classes: String
      },
      methods: {
        checkClasses: function(){
          if(this.classes === 'grid_view') this.backgroundStyle = 'background: center / cover no-repeat url(background.jpg);';
        }
      },
      mounted: function() {
        this.checkClasses();
      },
      watch: {
        classes: function(){
          this.checkClasses();
        }
      }
    }
    </script>
My console.logs on rackClass so I know the class swapping part is working, but all my subsequent child components don't seem to be updating accordingly..
Can someone tell me what I'm doing wrong? Is there a better way to do this? How come my props aren't being passed when I drag the window, and how can I dynamically set styles in the DOM?
 
    