组件库的使用和自定义组件 | 青训营笔记

37 阅读3分钟

组件库的使用和自定义组件

组件库介绍

首先我们来说说组件的概念

组件是对数据和方法简单的封装,组件拥有自己的属性和方法。属性是组件数据的简单访问,方法是组件简单可见的功能。

这是比较官方的对组件概念的文字描述,但是怎么去理解呢?

接下来我们还是回到前端组件这个话题上来。在前端,我们可以分为前端重构前端交互,首先我们先说说重构,顾名思义重构就是重新构建,是指我们将设计稿重新构建成计算机浏览器可编译、可认识的语言-HTML和CSS。HTML用于创建页面数据的展示结构,定义各种数据展示标签;CSS定义了数据的展示样式。在页面中,数据源于HTML结构中的文字、图片、链接、按钮、表单元素等;CSS则体现了动作和功能,比如选中、显示、隐藏等等。那么,到底什么才是组件呢?前端组件,就是组成页面内容的零件,它是HTML结构和CSS样式的综合体,组件本身并无交互效果。注意,不是任何一段HTML标签都可以叫做组件。

它必须具备以下几个特性:

  • 组件是页面中公共的、相对独立的最小单位;
  • 组件是由一个或多个HTML元素组成的集合;
  • 组件可以没有功能,但必须拥有数据,一个空标签集合不能称作有效的组件;

常见的组件库:

Vue2

Element :

element.eleme.cn/#/zh-CN/com… 主用于后台项目

Vant

youzan.github.io/vant/#/zh-C… 主用于移动端项目

uView:

v1.uviewui.com/components/… 使用 uniapp 开发时

Vue3:

Element- plus:

element-plus.gitee.io/zh-CN/compo… 主用于后台项目

使用框架 : vue-admin-beautiful.com/admin-plus/…

React:

Ant Design:

ant.design/components/… 这是一个可以用来快速设计后台 / 内部应用的 UI 库。

它拥有一个社区、大量支持文档,还有一个带有预制模板的单独项目AntDesignPro。

AntDesign的缺点主要有三点:一是缺乏可访问性;二是体积很大,预计会对性能产生较大影响;三是会污染你的 CSS。

Bootstrap:

ant.design/components/…

它可以看作是一个UI库,虽然不会帮你赢得任何设计奖项,但可以用来完成一些边缘项目和最小可行产品。

不过这取决于你要使用它的目的,如果你不熟悉 React,那么它是一个很好的入门库。但对于经验更丰富的开发人员来说,他们可能会去研究 styled-components / Emotion。

Bootstrap 的优点主要有五点:一是能快速上手;二是拥有两个带有 React 绑定的 Bootstrap 库;三是能通过 CSS-in-JS 轻松自定义;四是已经流行了足够长的时间了,因此不必担心一些错误 / 问题的发生;五是没有 jQuery 依赖,因为它已在 React 中完全重新实现。

Bootstrap 的缺点是,如果你不做自定义,那么你的网站将和其他网站没什么区别。

常用的icon图标库

阿里巴巴矢量图标库

自定义组件

函数式声明组件:

顾名思义,就是将一个函数作为一个组件(函数名第一个字母大写是组件,小写是函数),然后调用组件并且给组件传参。

<script type="text/babel">
     /**
     * 1.父组件
     */
    function FartherComponent(){
        return (
         <div>
             <h1>父组件给子组件传值</h1>
             /**
              * 调用子组件,并且给子组件传值book=1
              */
             <ChildComponent book={1}/>
         </div>
        )
    }
	/**
	* 2.子组件
	* @param {Object} props 父组件给子组件传递的参数
	*/
    function ChildComponent(props){
    	/**
    	 * props是父组件给子组件传递的参数对象,book是参数对象中的一个属性
    	 */
        return <p>子组件接收到的值是: {props.book}</p>
    }
    ReactDOM.render(<FartherComponent/>,document.getElementById('test1'));
</script>```

类式声明组件
```js
 <div id="test"></div>
 <script type="text/babel">
      /**
       * 1.使用类声明一个组件
       */
      class MyComponent extends React.Component {
      	/**
      	 * 构造器的作用
      	 * 1,指定this
      	 * 2,设置初始化状态this.setState({});
      	 * 3,为构造函数绑定this
      	 */
      	constructor(props) {
              super(props);//指定this,可以使用this
              //this.state = {name:'name',value:'value'}设置初始化状态
              //this.attr = this.attr.bind(this)为事件处理函数绑定实例
          }
      
          render(){
              return (
                  <div>
                      <h3>这是用类创建出来的组件,接收数据是:{this.props.data}</h3>
                  </div>
              )
          }
      }
      /**
       * 2.调用组件并且传递参数
       */
      ReactDOM.render(<MyComponent data='接收数据'/>,document.getElementById('test'));
 </script>