当前位置:首页 » 《随便一记》 » 正文

练习vue-x的小demo_m0_52765288的博客

21 人参与  2022年02月20日 10:18  分类 : 《随便一记》  评论

点击全文阅读


小demo----vuex的练习

先来看效果

目标 通过vuex发送请求  渲染页面  代码:

  store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    bookList: []
  },
  mutations: {
    // 获取图书列表
    getBooks (state, newList) {
      state.bookList = newList
    },
    delBook (state, index) {
      state.bookList.splice(index, 1)
    }
  },
  actions: {
    async ajax (state) {
      try {
        const { data } = await axios({
          url: 'https://www.fastmock.site/mock/37d3b9f13a48d528a9339fbed1b81bd5/book/api/books'
        })
        this.commit('getBooks', data.data)
      } catch (err) {
        console.log(err)
      }
    }
  },
  modules: {
  }
})

async 代表一个异步操作  await用来接受axios发送请求的成功的结果

try  catch用来捕获发起请求中的错误

 shopCar 组件

<template>
  <div class="shop">
      <div class="shop-item" v-for="(obj,index) in $store.state.bookList" :key="index">
        <i class="el-icon-circle-close" @click="del(index)"></i>
        <img :src="obj.img" alt="">
        <p>{{obj.name}}</p>
        <span>{{obj.price}}</span>
      </div>
  </div>
</template>

<script>
export default {
  created () {
    this.$store.dispatch('ajax')
  },
  methods: {
    del (ind) {
      this.$store.commit('delBook', ind)
    }
  }
}
</script>

<style lang="less" scoped>
    div{
        box-sizing: border-box;
    }
    .shop{
        width: 900px;
        margin: 0 auto;
        margin-top: 50px;
        // background-color: #ccc;
        .shop-item{
            position: relative;
            float: left;
            width: 25%;
            height: 280px;
            // background-color: red;
            padding: 20px 27px;
            text-align: center;
            i{
                position: absolute;
                display: none;
                top: 5px;
                right: 2px;
                font-size:20px;
                color:skyblue
            }
            img{
                width:100%;
                height: 75%;
            }
            p{
                padding: 0 !important;
                margin: 0;
            }
            span{
                // margin-left: 60px;
                text-align: center;
            }
        }
        .shop-item:hover {
            box-shadow: 0 8px 8px rgba(10,16,20,.24),0 0 8px rgba(10,16,20,.12);
        }
        .shop-item:hover i{
            cursor: pointer;
            display: block;
        }
    }
</style>

1. 组件初始化钩子函数调用vuex中的action发起ajax请求  拿到数组 循环渲染

2.删除:点击传入索引  调用this.$store.commit('') 调用vuex中的mutation中的方法来对vuex中的state的数据进行修改

app.vue

<template>
  <div>
    <ShopCar></ShopCar>

  </div>
</template>

<script>
import ShopCar from './views/02-购物车渲染.vue'
export default {
  name: '',
  props: {},
  data () {
    return {}
  },
  methods: {},
  computed: {},
  watch: {},
  created () {
  },
  mounted () {},
  components: {
    ShopCar
  }
}
</script>

<style scoped lang='less'>

</style>

 注册组件 显示页面


点击全文阅读


本文链接:http://zhangshiyu.com/post/35006.html

请求  渲染  调用  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 春到南楼雪尽处傅庭州春到南楼雪尽处傅庭州免费
  • 全文我在回忆里万劫不复结局+番外(秦见鹿谢梵声)列表_全文我在回忆里万劫不复结局+番外
  • 半堂花夜渡空城+结局+番外(裴砚泽沈诺柠)结局_(裴砚泽沈诺柠半堂花夜渡空城+结局+番外全书结局)结局列表_笔趣阁(裴砚泽沈诺柠)
  • [莫比乌斯环重生]全文免费无弹窗阅读_笔趣阁_林飒明白囡囡节选名场面直通车‌
  • 沉舟尽历万木春结局+番外(傅沉舟阮知微)_(沉舟尽历万木春结局+番外)列表_笔趣阁(傅沉舟阮知微)
  • 填我十万八千梦,沈昭宜傅沉砚免费沈昭宜
  • 前尘难再温+后续+结局+番外(申淮霆嵩思予)_(申淮霆嵩思予)前尘难再温+后续+结局+番外
  • 兰因絮果,爱恨全如玉碎列表_兰因絮果,爱恨全如玉碎(长乐肖风行)
  • 兰因絮果,爱恨全如玉碎全书+后续(长乐肖风行)结局_(长乐肖风行兰因絮果,爱恨全如玉碎全书+后续全书结局)结局列表_笔趣阁(长乐肖风行)
  • 踏入豪门圈复仇,剧情却变甜宠?+后续+结局(王芸傅司砚)列表_踏入豪门圈复仇,剧情却变甜宠?+后续+结局(王芸傅司砚)结局篇+番外在线
  • [我在阴间当土匪]反转剧情试读片段_萧尘刘豫州吴怡后续大结局更新+番外
  • 七零重生男知青手撕渣女上大学++后续宋挽晴完本_七零重生男知青手撕渣女上大学++后续(宋挽晴)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1