第 4(a) 部分:如何构建独立组件

本文介绍了在前端开发中使用独立组件的概念,以VueJs为例,详细讲解如何创建一个自包含、可重用的输入字段组件。通过定义组件的结构、属性和方法,以及如何在其他组件中使用这些自定义组件,强调了组件化和模块化对于管理代码和提高代码复用性的重要性。
摘要由CSDN通过智能技术生成

什么是独立组件?

在构建前端应用程序时,更建议以将应用程序组件分解为小的、独立的和可重用的部分的思维方式进行开发。这将有助于管理代码库,因为它知道在出现问题时应该去哪里。

在前端开发中,自包含组件是指一个模块化代码单元,它封装了呈现用户界面特定部分所需的视觉元素(HTML 或 JSX)、样式 (CSS) 和行为 (JavaScript)。这些组件被设计成独立的和可重用的,使它们成为创建复杂用户界面的基本构建块。该组件允许配置并接受数据作为道具。
在这里插入图片描述
从上图中,有几点需要注意:

输入:有两个数据输入字段;数据在第一个输入中作为 prop 传递给组件,而第二个是用户输入数据。

组件:它是独立的、模块化的和可重用的。通过 props 接受数据并将其传递给内部配置进行处理。

内部配置:组件通常可以接受道具或配置选项来定制它们的外观或行为。这种灵活性使他们能够在不修改底层代码的情况下适应不同的用例;所有工作都在组件内完成。

在此示例中,我们将使用 VueJs 创建一个可重用的输入字段、一个下拉选择和一个模式弹出组件。这些组件是我们在开发本系列的项目阶段时将使用的组件。该组件不是可访问的输入,因为它缺少一些重要的可访问性功能,例如键盘控制和 wai-aria 角色。

这是为了以简短明了的方式向读者解释这个概念而创建的。但是,在构建生产环境时,应该努力使自己的应用程序易于访问。

构建可重复使用的表单输入

要在 Vue 中构建一个独立的组件,您可以按照以下步骤操作:

注意:我们使用的是第 1 部分中设置的现有 Vue 项目。

第一步:新建一个文件夹,比如命名为common。在您的组件目录中。
该文件夹将包含我们所有的可重用组件

第 2 步:创建一个新的组件文件。
在您的项目目录中,导航到 src/components/common 文件夹(如果不存在则创建它)。为您的组件创建一个新文件,例如 CustomInput.vue。

第 3 步:定义组件
在您首选的代码编辑器中打开 CustomInput.vue 文件,并使用 Vue 的单文件组件语法定义您的组件。

src/components/common/CustomInput.vue

<template>
   <div class="form-control">
      <label v-show="isLabel" :for="IdName">{{ labelValue }}</label>
      <input 
         :type="CustomType"
         class="custom__inputs"
         :placeholder="PlaceHolder"
         :value="value"
         :readonly="readOnly"
         :id="IdName"
         :autofocus="setFocus"
         :autocomplete="setAutocomplete"
         @input="onInput"
      >
      <p v-show="withValidation">{{ errorMsg }}</p>
   </div>
</template>
<script>
export default {
   name:'CustomInput',
   props: {
      labelValue: {
         type: String,
         default: 'Label',
      },
      isLabel: {
         type: Boolean,
         default: false,
      },
      CustomType: {
         type: String,
         default: 'text'
      },
      PlaceHolder: {
         type: String,
         default:'',
      },
      value: {
         type: String,
      },
      readOnly: {
         type: Boolean,
         default: false,
      },
      IdName: {
         type: String,
         default: '',
      },
      setFocus: {
         type: Boolean,
         default: false,
      },
      setAutocomplete: {
         type: Boolean,
         default: true,
      },
      withValidation: {
         type: Boolean,
         default: false,
      },
      errorMsg: {
         type: String,
         default: ''
      }
   },
   methods: {
      onInput(e){
         this.$emit('input', e.target.value);
      }
   }
}
</script>
<style lang="scss" scoped>
   //component styles
   .form-control {
      display: flex;
      flex-direction: column;
      align-items: flex-start;
      margin-bottom: 2rem;

      & label {
         padding: 5px 2px;
      }

      & p {
         margin: 2px 0px;
         font-size: 14px;
         color: #e74e3c;
      }
   }

   .custom__inputs {
      padding: 10px ;
      font-size: 16px;
      border: 2px solid #eee;
      border-radius: 5px;
      width: 100%;

      &:focus {
         border: 3px solid #67679ac5;
      }
   }
</style>

第 4 步:使用组件。
要使用您的自定义输入组件,您可以将其导入另一个 Vue 组件并将其包含在模板中。比如进入同一个src文件夹下的view文件夹,使用Home.vue中的组件,如下:

<template>
  <div class="home">
    <!-- render emit data -->
    <form class="form__container" action="">
      <CustomInputVue
        v-model="firstName"
        :value="firstName"
        :PlaceHolder="'Firstname'"
        :withValidation="true"
        :errorMsg="'required'"
        :isLabel="true"
        :labelValue="'FirstName'"
      />
      <CustomInputVue
        v-model="email"
        :value="email"
        :PlaceHolder="'hello@example'"
        :withValidation="true"
        :errorMsg="'required'"
        :isLabel="true"
        :labelValue="'Email'"
      />
      <button class="btn">submit</button>
    </form>

  </div>
</template>

<script>
// @ is an alias to /src
import CustomInputVue from '@/components/common/CustomInput.vue'


export default {
  name: 'HomeView',
  components: {
    CustomInputVue,
  },
  data(){
    return {
      parentData: 'You are learning about props in this article',
      newMsg: 'hello',
      firstName: '',
      email: ''
    }
  },
}
</script>

<style lang="scss" scoped>
  .form__container {
    width: 40%;
    margin: 0 auto;
  }

  .btn {
    background: #0000ff;
    color: #fff;
    font-size: 18px;
    padding: 7px 15px;
    border: none;
    border-radius: 5px;

  }
</style>

这个组件的使用有几点需要注意

labelValue:它接受字符串数据;它用于传递输入的标签标题。设置为 true 时应与 isLabel 一起使用。

isLabel:它接受布尔数据;默认为 false;如果要使用内部标签,请将其设置为 true;否则,它应该是错误的。

CustomType:它接受字符串数据;您可以将需要使用的输入类型传递给它。

PlaceHolder: 它接受字符串数据。

value:它接受字符串数据;

readOnly:它接受布尔数据;如果您需要将表单输入设置为只读,则应将其设置为 true。

IdName:这是为了将 id 传递给表单输入,它接受一串数据。

setFocus:接受一个布尔值,这是为了控制输入字段的焦点。

setAutocomplete:这是为了在文本输入时设置 HTML 自动完成。

withValidation: 这个默认是false,但是如果你想给props添加验证信息,可以设置为true。

errorMsg:接受一串数据;作为错误消息,应将“with validation”设置为 true。

最终结果的图像:
在这里插入图片描述

如果你喜欢我的文章,记得关注获取更多的信息。感谢您的阅读,祝您有美好的一天!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q shen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值