精华内容
下载资源
问答
  • 注意:默认情况下安装的antd需要引入antd/dist/antd.css才会生效样式,但很多时候,我们只是使用了部分组件,引入整个antd样式文件,有些得不偿失。所以按需加载应运而生。 2.6 antd按需加载 1.添加babel-plugin...

    react-start

    基础知识

    1.使用脚手架创建项目并启动

    ​ 1.1 安装脚手架:

    npm install -g create-react-app
    

    ​ 1.2 使用脚手架创建项目:

    create-react-app antd-start-demo           antd-start-demo为项目名。
    

    ​ 1.3 启动

    npm start
    
    2.npm转换为yarn

    ​ 2.1 安装yarn:

     npm install -g yarn
    

    ​ 2.2 获取yarn当前的镜像源:

    yarn config get registry
    

    ​ 2.3 设置为淘宝镜像:

    yarn config set registry 'https://registry.npm.taobao.org'
    

    ​ 2.4 常用命令:

    yarn init		--初始化
    yarn add		--添加模块
    yarn remove		--删除模块
    yarn /yarn install		--安装项目中的依赖
    

    项目搭建

    2.1 安装react-router 4.0、axios、less-loader
    yarn add react-router-dom axios less-loader
    
    2.2 暴漏webpack配置
    yarn eject
    

    webpack配置

    2.3 配置less-loader

    ​ antd是基于less开发的,我们使用less可以方便的改变主题色等配置。

    ​ 安装less模块:yarn add less@2.7.3

    ​ 打开config/webpack.config.dev.js添加如下配置:

    {
                test: /\.less$/,
                use: [
                  require.resolve('style-loader'),
                  {
                    loader: require.resolve('css-loader'),
                    options: { importLoaders: 1 },
                  },
                  {
                    // Options for PostCSS as we reference these options twice
                    // Adds vendor prefixing based on your specified browser support in
                    // package.json
                    loader: require.resolve('postcss-loader'),
                    options: {
                      // Necessary for external CSS imports to work
                      // https://github.com/facebook/create-react-app/issues/2677
                      ident: 'postcss',
                      plugins: () => [
                        require('postcss-flexbugs-fixes'),
                        require('postcss-preset-env')({
                          autoprefixer: {
                            flexbox: 'no-2009',
                          },
                          stage: 3,
                        }),
                      ],
                    },
                  },
                  { loader: require.resolve('less-loader') }
                ],
    },
    

    到配置cssload同级如图所示

    图片示例

    注意:在webpack.config.dev.js添加的配置部分,也需要在webpack.config.prod.js中做相同的配置。否则可能导致项目发布上线后,报错无法执行。

    2.4 安装antd
     yarn add antd
    
    2.5 测试使用
    import { Button } from "antd";
    import 'antd/dist/antd.css';
    
    ...
     render() {
        return (
          <div>
              <Button>click</Button>
          </div>
        );
      }
    ...
    

    注意:默认情况下安装的antd需要引入antd/dist/antd.css才会生效样式,但很多时候,我们只是使用了部分组件,引入整个antd样式文件,有些得不偿失。所以按需加载应运而生。

    2.6 antd按需加载

    1.添加babel-plugin-import,

    yarn add babel-plugin-import

    2.打开webpack配置,搜索:JS with Babel

    找到如下配置:

    // Process application JS with Babel.
              // The preset includes JSX, Flow, TypeScript and some ESnext features.
              {
                test: /\.(js|mjs|jsx|ts|tsx)$/,
                include: paths.appSrc,
    
                loader: require.resolve('babel-loader'),
                options: {
                  customize: require.resolve(
                    'babel-preset-react-app/webpack-overrides'
                  ),
                  
                  plugins: [
                    [
                      require.resolve('babel-plugin-named-asset-import'),
                      {
                        loaderMap: {
                          svg: {
                            ReactComponent: '@svgr/webpack?-prettier,-svgo![path]',
                          },
                        },
                      },
                    ],
                  ],
                  cacheDirectory: true,
                  // Save disk space when time isn't as important
                  cacheCompression: true,
                  compact: true,
                },
              },
    

    进行修改plugin下添加:

    ["import", { "libraryName": "antd", "style": true }]

    至此可以取消引入css文件了,babel会自动根据引入的组件,默认加载对应的css。

    2.7修改主题色
                  {
                    loader: require.resolve('less-loader'),
                    options: {
                      modules: false,
                      modifyVars: {
                        "@primary-color": "#f9c700"
                      }
                    }
                  }
    

    在webpack,中配置less的地方即可修改。@primary-color为antd内置的less变量,只需要覆盖掉默认的配置,就实现了修改主题色。

    本文GitHub代码:GitHub地址

    作者博客:做全栈攻城狮

    分享交流前后端知识,一起做全栈攻城狮。

    展开全文
  • 一个出色的组件设计岂能没有易用易扩展的人机界面?Bootstrap为此提供了定制的jQuery内置插件。 用LESS构建 当传统的枯燥CSS写法止步不前时,LESS横空出世了。LESS中使用变量,嵌套,操作,混合编码,花费很小...
  • Vue前端项目-登录组件-登录框界面

    万次阅读 多人点赞 2020-03-09 15:45:16
    我们使用的是 element-ui 来做界面的, 当时我们创建项目的时候 选择组件按需导入因此当我们第一次到某组件时候需要在 src / plugins / element.js 文件中导入该组件并将组件绑定到 vue 对象 1.1 表单元素...

    目录

    1、登录框组件设计

    1.1 表单元素组件注册

    1.2 登录组件的结构和样式

    2、Icon 图标

    2.1 拷贝 font 文件夹到 asserts 目录

    2.2 引入 font 的 css 样式

    2.3  图标的使用

    2.4 测试


    1、登录框组件设计

    需求:

    登录框居于屏幕中央显示;

    登录框中的表单元素分别有:用户名、密码、验证码、记住我;

    效果如图:

    注意:

    我们使用的是 element-ui 来做界面的, 当时我们创建项目的时候 选择 组件按需导入 因此当我们第一次到某组件时候需要在

    src / plugins / element.js 文件中导入该组件 将组件绑定到 vue 对象

    1.1 表单元素组件注册

    在src / plugins / element.js 文件中, 引入登录组件中用到的表单对象。

    element.js 代码如下:

    import Vue from 'vue'
    import { Button, Form, FormItem, Input, Checkbox, Image } from 'element-ui'
    
    Vue.use(Button)
    Vue.use(Form)
    Vue.use(FormItem)
    Vue.use(Input)
    Vue.use(Checkbox)
    Vue.use(Image)
    

     1.2 登录组件的结构和样式

    login.vue 中 完成了登录的文本框居中 表单元素的添加

    <template>
      <div class="login_container">
        <div class="login_box">
         <!-- 登录表单区域 -->
          <el-form size="mini">
            <!-- 用户名 -->
            <el-form-item>
              <el-input placeholder="用户名"></el-input>
            </el-form-item>
            <!-- 密码 -->
            <el-form-item>
              <el-input placeholder="密码" show-password></el-input>
            </el-form-item>
            <!-- 验证码 -->
            <el-form-item>
              <el-input class="code" placeholder="验证码"></el-input>
              <a>
                <img />
              </a>
            </el-form-item>
            <!-- 记住我 -->
            <el-form-item>
              <el-checkbox label="记住我" class="rememberMe"></el-checkbox>
            </el-form-item>
            <!-- 登录按钮 -->
            <el-form-item>
              <el-button type="primary">登录</el-button>
            </el-form-item>
          </el-form>
        </div>
          <vue-particles
          color="#fff"
          :particleOpacity="0.7"
          :particlesNumber="60"
          shapeType="circle"
          :particleSize="4"
          linesColor="#fff"
          :linesWidth="1"
          :lineLinked="true"
          :lineOpacity="0.4"
          :linesDistance="150"
          :moveSpeed="2"
          :hoverEffect="true"
          hoverMode="grab"
          :clickEffect="true"
          clickMode="push"
          class="lizi"
          style="height:100%"
        >
        </vue-particles>
      </div>
    </template>
    <script>
    export default {}
    </script>
    <style scoped>
    .login_container {
      background-image: linear-gradient(-180deg, #1a1454 0%, #0e81a5 100%);
      /*background-image: url("../images/bg_login.png");*/
      background-repeat: no-repeat;
      background-size: cover;
      height: 100%;
    }
    .login_box {
      width: 290px;
      height: 350px;
      /* background-color: #fff; */
      background-color: #2e527bb3;
      border-radius: 5px;
    
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    .el-form {
      padding: 32px;
      position: absolute;
      bottom: 0;
      width: 100%;
      box-sizing: border-box;
    }
    .el-button {
      width: 100%;
    }
    .code {
      width: 45%;
    }
    img {
      /* style="width: 100px; height: 30px; margin-left:5px;vertical-align: middle;" */
      display: line-inline;
      width: 45%;
      height: 28px;
      margin-left: 10px;
      vertical-align: middle;
      border-radius: 3px;
    }
    .rememberMe {
      color: #fff;
    }
    </style>
    

    2、Icon 图标

    给用户名、密码框的左侧添加 Icon 图标,实现效果:

    2.1 拷贝 font 文件夹到 asserts 目录

    font 文件夹会以 附件或百度网盘的 形式分享

    2.2 引入 font 的 css 样式

    在 main.js 中文件中, 引入 font 的 css 样式

    // 导入字体图标
    import './assets/fonts/iconfont.css'

    2.3  图标的使用

    <el-input placeholder="用户名" prefix-icon="iconfont icon-user"></el-input>
    
    <el-input placeholder="密码" show-password prefix-icon="iconfont icon-3702mima"></el-input>

    2.4 测试

    重写编译部署项目,即可看到效果

    展开全文
  • 前端界面设计

    2015-06-29 22:05:00
    布局的实现界面,包括下拉框、文本框、按钮、表格等组件
  • 前端组件化基础知识

    千次阅读 多人点赞 2020-12-31 22:45:17
    这里我们一起来学习前端组件化的知识,而组件化在前端架构里面是最重要的一个部分。

    同学们好,我是来自《技术银河》 的 三钻

    这里我们一起来学习前端组件化的知识,而组件化在前端架构里面是最重要的一个部分。

    讲到前端架构,其实前端架构中最热门的就有两个话题,一个就是组件化,另一个就是架构模式。组件化的概念是从开始研究如何扩展 HTML 标签开始的,最后延伸出来的一套前端架构体系。而它最重要的作用就是提高前端代码的复用性

    架构模式就是大家特别熟悉的 MVC, MVVM 等设计模式,这个话题主要关心的就是前端跟数据逻辑层之间的交互。

    所以说,前端架构当中,组件化可以说是重中之重。在实际工程当中,其实组件化往往会比架构模式要更重要一些。因为组件化直接决定了一个前端团队代码的复用率,而一个好的组件化体系是可以帮助一个前端团队提升他们代码的复用率,从而也提升了团队的整体效率

    因为复用率提高了,大家重复编写的代码量就会降低,效率就会提高,从而团队中的成员的心理和心智负担就会少很多。

    所以学习组件化可以是说是非常重要的

    这里我们先从了解什么是组件化和一个组件的基本组成部分开始。

    组件的基本概念

    组件都会区分为模块和对象,组件是与 UI 强相关的,所以某种意义上我们可以认为组件是特殊的模块或者是特殊的对象。

    组件化既是对象也是模块

    组件化的特点是可以使用树形结构来进行组合,并且有一定的模版化的配置能力。这个就是我们组件的一个基本概念。

    对象与组件的区别

    首先我们来看对象,它有三大要素

    1. 属性 —— Properties
    2. 方法 —— Methods
    3. 继承关系 —— Inherit

    在 JavaScript 中的普通对象可以用它的属性,方法和继承关系来描述。而这里面的继承,在 JavaScript 中是使用原型继承的。

    这里说的 “普通对象” 不包含复杂的函数对象或者是其他的特殊对象,而在 JavaScript 当中,属性和方法是一体的。

    相对比组件,组件里面包含的语义要素会更丰富一点,组件中的要素有:

    • 属性 —— Properties
    • 方法 —— Methods
    • 继承 —— Inherit
    • 特性 —— Attribute
    • 配置与状态 —— Config & State
    • 事件 —— Event
    • 生命周期 —— Lifecycle
    • 子组件 —— Children

    PropertiesAttribute 在英语的含义中是有很大的区别的,但是往往都会翻译成 “属性”。 如果遇到两个单词都出现的时候,就会把 Attribute 翻译为 “特性”,把 Properties 翻译成 “属性”。这两个要素要怎么区分呢?这里在文章的后面会和大家一起详细了解。

    接下来就是组件的 Config,它就是对组件的一种配置。我们经常会在一个构造函数创建一个对象的时候用到 Config ,我们传入这个构造函数的参数就叫 “Config(配置 )”。

    同时组件也会有 state(状态)。当用户去操作或者是一些方法被调用的时候,一个 state 就会发生变化。这种就是组件的状态,是会随着一些行为而改变的。而 statepropertiesattributesconfig 都有可能是相识或者相同的。

    event 就是 “事件” 的意识,而一个事件是组件往外传递的。我们的组件主要是用来描述 UI 这样的东西,基本上它都会有这种事件来实现它的某种类型的交互。

    每一个组件都会有生命周期 lifecycle,这个一会儿在文章的后面会详细的展开学习。

    组件的 children 是非常重要的一部分,children 也是组件当中一个必要的条件,因为没有 children 组件就不可能形成树形结构,那么描述界面的能力就会差很多。

    之前有一些比较流行的拖拽系统,我们可以把一些写好的 UI 组件拖到页面上,从而建立我们的系统界面。但是后面发现除了可以拖拽在某些区域之外,还需要一些自动排序,组件嵌套组件的功能需求。这个时候组件与组件之间没有树形结构就不好使了。

    最后组件在对象的基础上添加了很多语义相关的概念,也是这样使得组件变成了一种非常适合描述 UI 的概念。

    组件 Component

    我们用一张图来更深入的了解组件。

    组件最直接产生变化的来源就是用户的输入和操作,比如说当一个用户在我们的选择框组件中选中了一个选项时,这个时候我们的状态 state,甚至是我们的子组件 children 都会发生变化。

    图中右边的这几种情况就是组件的开发者与组件的关系。其中一种就是开发者使用了组件的标记代码 Markup Code,来对组件产生影响。其实,也就是开发者通过组件特性 Attribute 来更改组件的一些特征或者是特性。

    Attribute 是一种声明型的语言,也是标记型代码 Markup Code。而 Markup Code 也不一定是我们的 HTML 这种 XML 类的语言。在标记语言的大生态中,其实有非常多的语言可以用来描述一个界面的结构。但是最主流的就是基于 XML 体系的。在我们 Web 领域里面最常见的就是 XML 。而 JSX 也可以理解为一种嵌入在编程语言里面的 XML 结构。

    开发者除了可以用 Attribute,也可以用 Property 来影响组件。这个组件本身是有 Property(属性) 的,当开发者去修改一个组件的属性时,这个组件就会发生变化。而这个就是与对象中的 属性 Property 是一样的概念。

    AttributeProperty 是不是一样的呢?有的时候是,有的时候也不是,这个完全取决于组件体系的设计者。组件的实现者或者是设计者可以让 attributeproperty 统一。甚至我们把 stateconfigattributeproperty 四者都全部统一也是可以的。

    然后就是 方法 method,它是用于描述一个复杂的过程,但是在 JavaScript 当中的 Property 是允许有 getset 这样的方法的,所以最终 methodproperty 两者的作用也是差不多的。

    那么这里我们可以确定一个概念,使用组件的开发者会使用到 methodproperty,这些组件的要素。但是如果一个开发组件的开发者需要传递一个消息给到使用组件的程序员,这个时候就需要用到 事件 event。当一个组件内部因为某种行为或者事件触发到了变化时,组件就会给使用者发送 event 消息。所以这里的 event 的方向就是反过来的,从组件往外传输的。

    通过这张图我们就可以清楚知道组件的各个要素的作用,以及他们的信息流转方向

    特性 Attribute

    在所有组件的要素中,最复杂的无非就是 AttributeProperty

    我们从 Attribute 这个英文单词的理解上,更多是在强调描述性。比如,说我们描述一个人,头发很多、长相很帅、皮肤很白,这些都是属于 Attribute,也可以说是某一样东西的特性和特征方面的描述。

    Property 跟多的是一种从属关系。比如我们在开发中经常会发现一个对象,它有一个 Property 是另外一个对象,那么大概率它们之间是有一个从属关系的,子对象是从属于父对象。但是这里也有一种特殊情况,如果我们是弱引用的话,一个对象引用了另外一个对象,这样就是完全是另一个概念了。

    上面讲的就是这两个词在英文中的区别,但是在实际运用场景里面他们也是有区别的。

    因为 Property 是从属关系的,所以经常会在我们面向对象里面使用。而 Attribute 最初就是在我们 XML 里面中使用。它们有些时候是相同的,有些时候又是不同的。

    Attribute 对比 Property

    这里我们用一些例子来看看 Attribute 和 Property 的区别。我们可以看看它们在 HTML 当中不等效的场景。

    Attribute:

    <my-component attribute="v" />
    <script>
      myComponent.getAttribute('a')
      myComponent.setAttribute('a', value)
    </script>
    
    • HTML 中的 Attribute 是可以通过 HTML 属性去设置的
    • 同时也可以通过 JavaScript 去设置的

    Property:

    myComponent.a = 'value';
    
    • 这里就是定义某一个元素的 a = ‘value’
    • 这个就不是 attribute 了,而是 property

    很多同学都认为这只是两种不同的写法,其实它们的行为是有区别的。

    Class 属性

    <div class="class1 class2"></div>
    
    <script>
      var div = document.getElementByTagName('div');
      div.className // 输出就是 class1 class2	
    </script>
    

    早年 JavaScript 的 Class 是一个关键字,所以早期 class 作为关键词是不允许做为属性名的。但是现在这个已经被改过来了,关键字也是可以做属性名的。

    为了让这个关键字可以这么用,HTML 里面就做了一个妥协的设计。在 HTML 中属性仍然叫做 class 但是在 DOM 对象中的 property 就变成了 className。但是两者还是一个互相反射的关系的,这个神奇的关系会经常让大家掉一些坑里面。

    比如说在 React 里面,我们写 className它自动就把 Class 给设置了。

    Style 属性

    现在 JavaScript 语言中,已经没有 class 和 className 两者不一致的问题了。我们是可以使用 div.class 这样的写法的。但是 HTML 中就还是不支持 class 这个名字的,这个也就是一些历史包袱导致的问题。

    有些时候 Attribute 是一个字符串,而在 Property 中就是一个字符串语义化之后的对象。最典型的就是 Style

    <div class="class1 class2" style="color:blue"></div>
    
    <script>
      var div = document.getElementByTagName('div');
      div.style // 这里就是一个对象
    </script>
    

    在 HTML 里面的 Style 属性他是一个字符串,同时我们可以使用 getAttribute 和 setAttribute 去取得和设置这个属性。但是如果我们用这个 Style 属性,我们就会得到一个 key 和 vaule 的结构。

    Href 属性

    在 HTML 中 href 的 attribute 和 property 的意思就是非常相似的。但是它的 property 是经过 resolve 过的 url。

    比如我们的 href 的值输入的是 “//m.taobao.com”。这个时候前面的 http 或者是 https 协议是根据当前的页面做的,所以这里的 href 就需要编译一遍才能响应当前页面的协议。

    做过 http 到 https 改造的同学应该都知道,在让我们的网站使用 https 协议的时候,我们需要把所有写死的 http 或者 https 的 url 都要改成使用 //

    所以在我们 href 里面写了什么就出来什么的,就是 attribute。如果是经过 resolve 的就是我们的 property 了。

    <a href="//m.taobao.com"></a>
    <script>
      var a = document.getElementByTagName('a');
      // 这个获得的结果就是 "http://m.taobao.com", 这个 url 是 resolve 过的结果
      // 所以这个是 Property
      a.href;
      // 而这个获得的是 "//m.taobao.com", 跟 HTML 代码中完全一致
      // 所以这个是 Attribute
      a.getAttribute('href');
    </script>
    

    在上面的代码中我们也可以看到,我们可以同时访问 property 和 attribute。它们的语义虽然非常的接近,但是它们不是一样的东西。

    不过如果我们更改了任何一方,都会让另外一方发生改变。这个是需要我们去注意的现象。

    Input 和 value

    这个是最神奇的一对,而 value 也是特别的坑。

    我们很多都以为 property 和 attribute 中的 value 都是完全等效的。其实不是的,这个 attribute 中的 input 的 value 相当于一个 value 的默认值。不论是用户在 input 中输入了值,还是开发者使用 JavaScript 对 input 的 value 进行赋值,这个 input 的 attribute 是不会跟着变的。

    而在 input 的显示上是会优先显示 property,所以 attribute 中的 value 值就相当于一个默认值而已。这就是一个非常著名的坑,早期同学们有使用过 JQuery 的话,我们会觉得里面的 prop 和 attr 是一样的,没想到在 value 这里就会踩坑。

    所以后来 JQuery 库就出了一个叫 val 的方法,这样我们就不需要去想 attribute 还是 property 的 value,直接用它提供的 val 取值即可。

    这里一方面是一起增强一下 HTML 的 property 和 attribute 的知识。另一方面就是让我们认识到,就算是非常顶级的计算机专家设计的标签系统,也出现两个差不多的属性不等效的问题。那么如果让我们去设计一个标签系统,我们会让 property 和 attribute 等效还是不等效呢? 等学习完整个组件化的知识后,我们一起来回答一下这个问题。

    如何设计组件状态

    这里我们来分析一下,propertyattributestateconfig 在组件设计中都有什么区别。

    这里 Winer 老师给我们整理了一个表格,分成了四个场景:

    • Markup set —— 用标签去设置
    • JavaScript Set —— 使用 JavaScript 代码去设置
    • JavaScript Change —— 使用 JavaScript 代码去改变
    • User Input Change —— 终端用户的输入而改变
    Markup setJavaScript setJavaSscript ChangeUser Input Change
    property
    attribute
    state
    config

    那么我们一个一个来讲述一下:

    • Property
      • ❌ 它是不能够被 markup 这种静态的声明语言去设置的
      • ✅ 但是它是可以被 JavaScript 设置和改变的
      • ❓ 大部分情况下 property 是不应该由用户的输入去改变的,但是小数情况下,可能是来源于我们的业务逻辑,才有可能会接受用户输入的改变
    • Attribute
      • ❓ 用户的输入就不一定会改变它,与 Property 同理
      • ✅ 是可以由 markup,JavaScript 去设置的,同时也是可以被 JavaScript 所改变的
    • State
      • ❌ 状态是会由组件内部去改变的,它不会从组件的外部进行改变。如果我们想设计一个组件是从外部去改变组件的状态的话,那么我们组件内部的 state 就失控了。因为我们不知道组件外部什么时候会改变我们组件的 state,导致我们 state 的一致性无法保证。
      • ✅ 但是作为一个组件的设计者和实践者,我们一定要保证用户输入是能改变我们组件的 state 的。比如说用户点击了一个 tab,然后点中的 tab 就会被激活,这种交互一般都会用 state 去控制的。
    • Config
      • ✅ Config 在组件中是一个一次性生效的东西,它只会在我们组件构造的时候触发。所以它是不可更改的。也是因为它的不可更改性,所以我们通常会把 config 留给全局。通常每个页面都会有一份 config,然后拿着这个在页面内去使用。

    组件生命周期 Lifecycle

    讲到生命周期,我们最容易想到的会有两个,一个是 created 一个是 destroy。世界万物的生命必定会有 出生死亡,这两个生命周期。

    那么在这两个开始与结束之间有什么生命周期呢?我们就需要想一下,一个组件在构造到销毁之间都会发生什么事情。

    一个组件有一个非常重要的事情,就是它被创建之后,它有没有被显示出来。这里就涉及生命周期中的 mount,也就是组件有没有被挂載到 “屏幕的这棵树上”。这个生命周期我们可以在 React 和 Vue 里面看到,我们经常会使用这个生命周期,在组件被挂載后做一些相应的初始化操作。

    有挂載那必然就会有卸载,所以组件中的 mountunmount 是一组生命周期。而这个挂載与卸载的整个生命周期是可以反复的发生的,我们可以挂上去然后卸下来,然后再挂上去,这样反复又反复的走这个生命周期。

    所以在 unmount 之后,我们是可以回到 created 构建组件的这个生命周期的状态。

    那么组件还会在什么时候发生状态更变呢?这里我们就有两种情况:

    • 程序员使用代码去改变或者设置这个组件的状态
    • 用户输入时影响了组件的状态

    比如说我们用户点了一下按钮或者 Tab,这个时候就会触发这个组件的状态更变。同时也会产生一个组件的生命周期,而这个生命周期就是 Render 渲染或者 Update 更新。

    所有这些生命周期加在一起就是我们一个组件完整的生命周期。我们看到的所谓 willMountdidMount 无非就是这个生命周期之中更细节的位置。下面我给大家附上一张完整的生命周期的图。


    Children

    最后我们来讲一下 Children (子组件)的概念。Children 是构建组件树最重要的一个组件特性,并且在使用中其实有两种类型的 Children:

    • Content 型 Children —— 我们有几个 Children,但是最终就能显示出来几个 Children。这种类型的 Children,它的组件树是非常简单的。
    • Template 型 Children —— 这个时候整个 Children 它充当了一个模版的作用。比如说我们设计一个 list,但是最后的结果不一定就与我们 Children 代码中写的一致。因为我们 List 肯定是用于多个列表数据的,所以 list 的表示数量是与我们传入组件的 data 数据所相关的。如果我们有 100 个实际的 children 时,我们的 list 模版就会被复制 100 份。

    在设计我们的组件树的 children 的时候,一定要考虑到这两种不同的场景。比如我们在 React中,它没有 template 型的 children,但是它的 children 可以传函数,然后这个函数可以返回一个 children。这个时候它就充当了一个模版型 children 的作用了。那么在 Vue 里面当我们去做一些无尽的滚动列表的时候,这个对 Vue 的模版型 children 就有一定的要求。

    结束语

    这里我们就学习完了整个组件的概念和知识了,下一篇文章我们就会一起来设计和搭建一个组件系统,并且了解到它的各方各面的实践知识。我们还会用一些典型的组件和典型的功能来让大家对组件的实现有一定的了解。



    博主开始在B站直播学习,欢迎过来《直播间》一起学习。

    我们在这里互相监督,互相鼓励,互相努力走上人生学习之路,让学习改变我们生活!

    学习的路上,很枯燥,很寂寞,但是希望这样可以给我们彼此带来多一点陪伴,多一点鼓励。我们一起加油吧! (๑ •̀ㅂ•́)و


    我是来自《技术银河》的三钻,一位正在重塑知识的技术人。下期再见。


    推荐专栏

    小伙伴们可以查看或者订阅相关的专栏,从而集中阅读相关知识的文章哦。

    • 📖 《前端进阶》 — 这里包含的文章学习内容需要我们拥有 1-2 年前端开发经验后,选择让自己升级到高级前端工程师的学习内容(这里学习的内容是对应阿里 P6 级别的内容)。

    • 📖 《数据结构与算法》 — 到了如今,如果想成为一个高级开发工程师或者进入大厂,不论岗位是前端、后端还是AI,算法都是重中之重。也无论我们需要进入的公司的岗位是否最后是做算法工程师,前提面试就需要考算法。

    • 📖 《FCC前端集训营》 — 根据FreeCodeCamp的学习课程,一起深入浅出学习前端。稳固前端知识,一起在FreeCodeCamp获得证书

    • 📖 《前端星球》 — 以实战为线索,深入浅出前端多维度的知识点。内含有多方面的前端知识文章,带领不懂前端的童鞋一起学习前端,在前端开发路上童鞋一起燃起心中那团火🔥

    展开全文
  • 前言:之前分享过两篇关于流程画图的前端组件,使用的jsPlumb。这个组件本身还不错,使用方便、入门简单、轻量级,但是使用一段时间下来,发现一些弊病,比如组件不太稳定,初始进入页面的时候连线的样式有时会乱掉...
  • 前端界面框架之layui

    千次阅读 2020-04-18 19:39:48
    layui前端界面框架的简介及引入 一、 layui简介 1.1、定义 layui是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积...

    layui前端界面框架的简介及引入


    一、 layui简介

    1.1、定义

    layui是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。

    1.2、特色

    layui 基本兼容市面上的所有浏览器(IE6/7除外),可作为 PC 端后台系统与前台界面的速成开发方案。

    1.3、官网

    https://www.layui.com/

    1.4、下载

    进入官网后,点击立即下载按钮即可下载,最新的版本为2.5.6。

    在这里插入图片描述


    二、layui引入

    2.1、简介

    我们这里使用的是本地引入,还有其它引入方式,比如CDN静态引入等。

    找到下载的压缩包,用压缩软件解压。

    2.2、创建项目

    笔者这里使用HBuilder X作为演示编辑器,此编辑器是国产的一个编辑器,安装过程可以去百度搜索。下面开始我们的正题。

    • 打开HBuilder X编辑器,点击新建项目

    在这里插入图片描述

    • 来到以下界面后,按图示步骤操作,即可成功创建项目。

    在这里插入图片描述

    • 创建完成后的项目结构如下所示。

    在这里插入图片描述

    2.3、引入layui资源

    • 找到解压后的layui-v2.5.6文件夹,笔者这里将layui-v2.5.6去除掉了,把layui文件夹作为父文件夹,如下所示。

    在这里插入图片描述

    • 在项目工程文件夹中,新建lib文件夹,用来存放引用的第三方文件。

    在这里插入图片描述

    • layui整个文件夹拷贝到lib目录下,如图所示。

    在这里插入图片描述
    注:css文件夹存放样式表文件, font文件夹存放字体文件, images文件夹存放图片文件, lay文件夹存放模块文件, layui.all.jslayui.js文件是JavaScript脚本文件。后面我们使用layui的元素时将会引入layui.js文件,它是基础核心库文件,而layui.all.js 包含layui.js和所有模块文件 。

    • 打开index.html文件,在head标签中用link标签引入layui的样式表文件。

    在这里插入图片描述

    注:rel属性指文件类型, type指文本格式, hreflayui.css样式表文件所在的相对路径。如果链接正确,则用Alt+鼠标左键即可跳转到相应文件;反之,则检查路径是否正确。

    源代码

    
    		<link rel="stylesheet" type="text/css" href="./lib/layui/css/layui.css" />
    
    • 现在我们在html页面中创建我们的第一个按钮hello,在index.html文件中添加如下所示代码。

    注:button标签相信大家都熟悉,class属性指定了按钮样式-默认的layui按钮样式。hello是按钮名,我们当前未使用其它的任何样式。
    在这里插入图片描述

    源代码

    <button class="layui-btn">hello</button>
    
    • 添加完成后点击编辑器右上角的预览按钮,它会自动打开内置浏览器,如果未安装,会提示安装信息。并且这个内置浏览器支持热刷新。运行界面如下所示。

    在这里插入图片描述

    到现在为止,我们已经成功引入layui样式表文件,可以愉快地添加控件了。后面我们会介绍其它常用控件的使用。

    展开全文
  • 前端组件化开发实践总结

    千次阅读 多人点赞 2021-10-13 12:46:52
    自从 2010 年第一份工作接触了前后端半分离的开发方式之后,在后面的这些年里,对前端组件化开发有了更全面一点的认识,组件化在我们的前端开发中,对提高开发效率、代码的可维护性和可复用性有很大帮助,甚至对跟...
  • Android里的前端界面

    千次阅读 2018-07-12 15:55:55
    如果说活动是每个界面的后台逻辑,Android里的前端界面就是res里的layout的XML文件。 目录 一、控件 Button:按钮控件 TextView:文本控件,用来显示文本 EditText:文本输入(编辑)框 ImageView:显示图片控件 ...
  • cron表达式,前端通过js 编写可视化界面,验证表示式并且展示出最近几次执行时间
  • Vue+Element-UI快速搭建前端界面

    万次阅读 2019-06-30 22:20:57
    文章目录Vue+Element-UI快速搭建前端界面主要参考:Vue主要使用总结概述组成v-model绑定数据v-for循环构造v-on:click点击处理beforeMount()Element-UI主要组件总结el-buttonel-inputel-menujs正则表达式进行合法性...
  • 普遍的 一个通用的前端组件库,用于构建功能强大且美观的界面。 ···
  • 0. 前端自动化 前端构建工具 gulp – The streaming build systemgrunt – the JavaScript Task Runner 前端模块管理器 Bower – A package manager for the webBrowserifyComponentDuoRequireJSSea.js css预...
  • Odoo Web前端界面详解 - 1

    千次阅读 2019-06-03 21:26:35
    近期准备对odoo web模块进行一些整理,大致的说说odoo的前端界面是如何生成的,又是如何与后端交互,主要着重点就是odoo的js这块的东西,由于odoo11的js代码已经有了较大的改变,所以就以odoo11来分析吧。...
  • 前端常用组件汇总

    千次阅读 2017-04-16 16:29:01
    前端常用组件汇总 日历 分页 分页表格 kendo grid bootstrap grid Kendo UI控件库
  • grayshift:一个轻量级的前端组件库,用于开发快速而强大的Web界面
  • Vue前端组件库介绍

    千次阅读 2019-10-23 18:22:03
    kb-vue-components组件库平台介绍 ...该项目致力于收录常用的VUE前端组件,并给大家展示相应的使用示例。方便小伙伴们找到合适的控件,并快速上手。 使用教程 Vue前端代码高亮编辑器Ace Vue使用echarts...
  • 用Vue实现个人博客的前端界面

    万次阅读 2017-08-09 12:21:50
    上一次认真的学习使用Vue已经是四月份的事了,当时只是简单的就像使用jQuery一样,直接引入页面,没有使用任何组件、路由,写了个cakeroom的小demo,感兴趣的可以去看下: github展示链接:...
  • 用 JSX 建立组件 Parser(解析器)- 前端组件

    万次阅读 多人点赞 2021-01-08 17:16:56
    这里我们一起从 0 开始搭建一个组件系统。首先通过上一篇《前端组件化基础知识》中知道,一个组件可以通过 Markup 和 JavaScript 访问的一个环境。
  • 前端组件管理系统,前端基于Vue2/Vue-router/Vuex实现,界面基于Flow-UI实现,后端基于野狗云实现。
  • 利用Qt为FFmpeg编写前端界面

    千次阅读 2010-08-09 16:20:00
    要真正给FFmpeg编写一个完全的前端界面,工作量无疑是巨大的,因为FFmpeg涉及到对多种格式转化,以及多个选项参数的选择,这些额外的组件以及不断改变的选项的参数,使得编写一个FFmpeg的前端界面变得尤为复杂,所以...
  • 前端组件化开发

    万次阅读 多人点赞 2016-11-28 16:40:54
    Component,中文称为组件,或者构件。使用非常比较广泛,它的核心意义在于复用,相对模块,对于依赖性有更高的要求。 Module, 中文为模块或模组。它的核心意义是分离职责,属于代码级模块化的产出。它本身是提供...
  • feathersui-openfl:由Haxe和OpenFL支持的,用于创意前端项目的跨平台用户界面组件
  • 今天浏览博客时发现了一篇不错的文章,介绍了各种前端组件的名称,便于前端人员更好的了解各种组件名称及功能! 以下内容来自一位菜鸟测试人员的编写,网上查阅资料汇总而成;非专业前端技术人员,非专业产品,有...
  • 教你用Bootstrap开发漂亮的前端界面

    千次阅读 2015-03-18 14:18:46
    使用bootstrap编写漂亮的界面,建议从 Bootstrap 全 局CSS样式 然后到 Bootstrap组件 最后 Bootstrap JavaScript插件 的顺序学习。 以下是一个简单的页面,使用bootstrap css美化了我们的页面;效果是不是比我们...
  • 基于 Angular 的前端组件

    千次阅读 2018-07-24 00:01:48
    其中组件化是最早在前端范围内展开应用的开发思想,比如 Bootstrap 对于标签样式的规范就是一种前端组件化。本篇文章是基于 Angular 框架对前端组件化的一些实践和思考,如有纰漏,还请谅解,欢迎指...
  • 前端如何封装组件

    千次阅读 2019-05-22 14:34:59
    这里写自定义目录标题前端如何封装table组件?欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个...
  • Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。 与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找...
  • 前端组件化框架之路

    千次阅读 2016-07-05 15:02:18
    但是在Web前端这个领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架/库都实现了自己的组件化方式。 前端圈最热衷于造轮子了,没有哪个别的领域能出现这么混乱而欣欣向荣的景象。...
  • 点击▲关注 “爪哇笔记” 给公众号标星置顶更多摄影技巧第一时间直达简介基于 Vue 开发的界面可视化设计器,前端小白可以直接拖拽生成前端代码。特性可视化拖拽布局支持数据关联和交互行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,706
精华内容 34,282
关键字:

组件安全前端界面