Vue3为什么引入composition API

作者: 深度剖析JavaScript | 来源:发表于2020-09-27 14:02 被阅读0次

    今天我们来聊聊Vue3为什么引入composition API,或者说composition API解决了什么问题?
    首先我们使用Vue2.x的形式来实现一个简单功能
    需求:
    1.当点击商品列表项时删除该项
    2.当点击添加按钮时,会根据表单中数据添加一行到商品列表中
    代码如下:

    <template>
      <div class="wrap">
        <section>
          <h6>商品列表</h6>
          <table>
            <thead>
              <td>序号</td>
              <td>名称</td>
              <td>单价</td>
              <td>折扣</td>
              <td>折后价</td>
            </thead>
            <tbody>
              <tr
                v-for="(fruit, index) in fruits"
                :key="fruit.id"
                @click="remove_item(index)"
              >
                <td>{{ fruit.id }}</td>
                <td>{{ fruit.fruit_name }}</td>
                <td>{{ fruit.price }}</td>
                <td>{{ fruit.discount }}</td>
                <td>{{ (fruit.price * fruit.discount).toFixed(2) }}元/斤</td>
              </tr>
            </tbody>
          </table>
          <br />
        </section>
        <section>
          <h6>如果想添加一个商品,请输入:</h6>
          <form>
            商品序号:<input type="text" v-model="f.id" /><br />
            商品名称:<input type="text" v-model="f.fruit_name" /><br />
            单价价格:<input type="text" v-model="f.price" /><br />
            打折折扣:<input type="text" v-model="f.discount" /><br />
            <button @click="add_item">添加</button>
          </form>
        </section>
      </div>
    </template>
    
    <script>
    export default {
      name: "App",
      data: function () {
        return {
          fruits: [
            { id: 1, fruit_name: "apple", price: 10, discount: 0.8 },
            { id: 2, fruit_name: "banana", price: 3, discount: 0.7 },
            { id: 3, fruit_name: "orange", price: 5, discount: 0.5 },
            { id: 4, fruit_name: "durain", price: 50, discount: 0.8 },
          ],
          f: {
            id: 5,
            fruit_name: "",
            price: "",
            discount: "",
          },
        };
      },
      methods: {
        remove_item(index) {
          this.fruits = this.fruits.filter((item, key) => index !== key);
        },
        add_item(e) {
          e.preventDefault();
          let temp = Object.assign({}, this.f);
          this.fruits.push(temp);
          this.f.id = this.fruits.length + 1;
          this.f.fruit_name = "";
          this.f.price = "";
          this.f.discount = "";
        },
      },
    };
    </script>
    

    简单加点样式

    .wrap{
      width: 600px;
      margin: 10px auto;
      display: flex;
      justify-content:space-around;
      background-color:rgb(253, 247, 247);
      border-radius:4px;
    }
    .wrap table thead{
      background-color: deepskyblue;
      font-weight: bold;
      font-size: 0.9em;
    }
    .wrap table tr:nth-of-type(2n+1){
      background-color:pink;
    }
    .wrap form{
      font-size: 0.9em;
    }
    .wrap button{
      margin-top: 10px;
      width: 100%;
      color: rgb(224, 43, 31);
      font-weight: 700;
    }
    
    显示结果如下

    上述例子中,我们可以看到,使用2.xoption API,每当实现一个功能,都会在data中添加一些数据,同时在methods中添加业务逻辑。这里还好只有两个简单的功能,但实际工作中,当添加很多很多功能时,要找到某个功能对应数据和业务逻辑就变得非常困难,并且业务逻辑不一定就在methods中,还可能分散在computedwatch等选配项中。所以vue3.0中引入了composition API,专门用于解决功能、数据和业务逻辑分散的问题,使项目更益于模块化开发以及后期维护

    相关文章

      网友评论

        本文标题:Vue3为什么引入composition API

        本文链接:https://www.haomeiwen.com/subject/oxakuktx.html