如何开发react组件库

如何开发react组件库

技术栈:React + Webpack + TypeScript + Docz

先上脚手架目录结构

docz:docz文档生成器的配置目录

example:demo目录

lib:打包后生成文件目录

scripts:执行脚本目录

src:测试、组件、文档目录

注意:本脚手架只是基本配置,内部代码比较简洁,主要是起到一个学习引导作用。

组件开发过程中没什么技术难点,主要是样式处理。 全局default.less样式处理借鉴了antd,将常用的样式用变量存储,方便后续主题设置

@wui-prefix: wui;
 
@primary-color: red;
@info-color: #3bb4f2;
@success-color: #5eb95e;
@danger-color: #dd514c;
@warning-color: #f37b1d;
@white: #fff;
@black: #000;
 
@alert-info-bg-color: @info-color;
@alert-success-bg-color: @success-color;
@alert-warning-bg-color: @warning-color;
@alert-danger-bg-color: @danger-color;

mixins/alert.less混合用函数注入变量

.var-alert(@background-color, @border-corlor, @text-color) {
  border: 1px solid @border-corlor;
  background-color: @background-color;
  color: @text-color;
}

然后组件components/alert/index.less中直接引入即可

@import '../style/default.less';
@import '../style/mixins/alert.less';
 
@alert-prefix-cls: ~'@{wui-prefix}-alert';
 
.@{alert-prefix-cls} {
  position: relative;
  padding: 8px 16px;
  margin-bottom: 10px;
 
  &-info {
    .var-alert(@alert-info-bg-color, @alert-info-bg-color, @white);
  }
 
  &-success {
    .var-alert(@alert-success-bg-color, @alert-success-bg-color, @white);
  }
 
  &-warning {
    .var-alert(@alert-warning-bg-color, @alert-warning-bg-color, @white);
  }
 
  &-danger {
    .var-alert(@alert-danger-bg-color, @alert-danger-bg-color, @white);
  }
}

构建过程中,less 文件无需转换为css文件,只需通过脚本遍历文件夹同步到对应目录下即可,build-less.js代码:

const readFiles = async (filePath, name, callback) => {
  const files = fs.readdirSync(filePath)
  files.forEach(file => {
    const filedir = path.join(filePath, file)
    fs.stat(filedir, (error, stats) => {
      if (error) {
        return console.error('stats error:', error)
      }
      if (stats.isFile() && filedir.indexOf(name) > -1) {
        callback && callback(filedir)
      } else if (stats.isDirectory()) {
        readFiles(filedir, name, callback)
      }
    })
  })
}
 
 
const componentsPath = 'src/components'
readFiles(
  path.join(__dirname, '../', componentsPath),
  '.less',
  (file, error) => {
    if (error) {
      return console.error('read files error:', error)
    }
    fs.outputFileSync(
      file.replace(componentsPath, 'lib'),
      fs.readFileSync(file)
    )
  }
)

文档界面:

贴一段Alert组件简易代码

import React, { Component } from 'react'
import classNames from 'classnames'
import { getPrefix } from '../util/method'
import './index.less'
 
interface AlertProps {
  type?: 'success' | 'error' | 'warn' | 'info'
  message: React.ReactNode
  className?: string
}
 
export default class Alert extends Component<AlertProps> {
  render() {
    const { type = 'info' } = this.props
    const prefix = getPrefix('alert')
    const className = classNames(prefix, `${prefix}-${type}`)
    return <div className={className}>{this.props.message}</div>
  }
}

在本地开发及测试完组件后需要发布到仓库测试,不建议发布到npm官方仓库中,因为毕竟是半成品,可以使用verdaccio在本地搭建一个私有仓库进行测试

更多React相关技术文章,请访问React答疑栏目进行学习!

以上就是如何开发react组件库的详细内容,更多请关注易知道|edz.cc其它相关文章!

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    IE脚本错误如何做Web脚本错误解决技巧

    IE脚本错误如何做Web脚本错误解决技巧,,这个问题是由于这样的事实,对网页的HTML源代码和客户端脚本不正确的工作,如微软Jscript或Visual Basic脚本