博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@blankapp/ui,高可定制和主题化的 React Native 组件库
阅读量:6881 次
发布时间:2019-06-27

本文共 3270 字,大约阅读时间需要 10 分钟。

  hot3.png

从今年3月开始,经过一段时间的思考,我抛弃了我之前一直挂在口上的全栈的自称,希望可以将我的 100% 的精力都集中在一个方向的技术栈上,从而开始了我的 React Native 路。

在项目初期,我像拼积木一样不断的往项目的 package.json 里加上了各种各样的组件库,在遭遇 React Native 的大版本升级和项目体量不断上升,项目代码变得越来越不可控,并且慢慢意识到导致这种情况的原因有很大一部分是因为依赖了太多的组件,而最早引用的组件库 依赖的组件非常的多,而且很大部分是我的项目使用不到的,所以在几个月前我在工作之余就慢慢尝试实现了自己的 ui 组件库,在这个项目已经达到了可用状态时,我用了将近三周时间将公司的项目重写了,并且使用了这个库,并且在这两周利用完善了文档。

所以,现在很高兴能把这个项目分享给大家,希望我的工作可以对你有一定的帮助。

简介

高可定制和主题化 React Native 组件库

浏览 上的文档,或者在我们的 中试用。

特性

  • 轻依赖,非常少的依赖
  • 全局主题化,多种样式选择器的实现
  • 丰富的基础组件
  • 友好的 API 设计

Live Demo

<iframe src="https://appetize.io/embed/q0wwt188mh3pxxxz1rzf1d4pgr?device=nexus5&scale=75&autoplay=true&orientation=portrait&deviceColor=black&language=en" width="300px" height="597px" frameborder="0" scrolling="no"></iframe>

如果 Appetize 服务不显示,点击这里查看 。

快速开始

必备条件

开始之前确保你已安装:

  • 已安装
  • 已安装

安装

创建一个新的 React Native 项目:

$ react-native init HelloWorld$ cd HelloWorld

安装 @blankapp/ui 并链接到您的项目中:

$ yarn add @blankapp/ui

现在,只需将以下内容复制到 React Native 项目的 index.ios.js 文件:

import React, { Component } from 'react';import { AppRegistry } from 'react-native';import Theme, {  ThemeProvider,  Screen,  Text,} from '@blankapp/ui';const drakTheme = {  'Screen': { backgroundColor: 'black' },  'Text': { color: 'white' },};Theme.registerTheme('dark', drakTheme);class Examples extends Component {  render() {	// 需要将 ThemeProvider 添加到程序入口组件中。    return (      
Hello World
); }}AppRegistry.registerComponent('Examples', () => Examples);

PS. 默认提供一套主题,你可以通过 查看效果,如果需要定义您的专属样式,请继续往下看。

运行程序

  • 在 Android 上运行:

    $ react-native run-android$ adb reverse tcp:8081 tcp:8081   # required to ensure the Android app can
  • 在 iOS 上运行:

    $ react-native run-ios

进阶特性

主题选择器

通过实现了一些类似于 CSS 的样式选择器,现在我们可以很方便的通过组件的 Props 来更改组件的样式

已完成选择器:

组件选择器(Button 组件,应用以下样式)
export default {  Button: {    activeOpacity: 0.8,    paddingLeft: 8,    paddingRight: 8,    paddingTop: 0,    paddingBottom: 0,  },};
属性选择器(Button 组件,当属性 disabledtrue,应用以下样式)
export default {  'Button[disabled=true]': {    opacity: 0.4,  },};
层级选择器(Button 组件下所有 Text 组件,应用以下样式)
export default {  'Button[size=mini]': {    Text: {      fontSize: 14,    },  },};

计划中的选择器:

类选择器(styleName、className)
export default {  // Come soon};

PS. 如果您需要更深入的去了解选择器的使用,请查看的定义。

自定义主题

当然,每个项目的设计风格肯定各有不同,默认主题很多情况下无法满足实际的开发需要,所以需要您自己自定义主题。

import Theme, { ThemeProvider } from '@blankapp/ui';// 定义一个样式表const drakTheme = {  'Screen': { backgroundColor: 'black' },  'Text': { color: 'white' },};// 注册一个 `dark` 样式Theme.registerTheme('dark', drakTheme);// 将 `theme` 属性设为 `dark` 就可以使用该样式了// 例:

PS. 如果你需要构建一个完整的主题,请查看的定义。

自定义组件

很多情况下,我们需要定义一些自己的组件用于满足我们的业务需求,所以您也可以很方便的构建一个自己的组件。

  1. 首先创建你的样式表文件
export default {  Title: {    backgroundColor: 'transparent',    color: '#FFFFFF',    fontSize: 17,    fontWeight: '500',    marginBottom: 4,  },};
  1. 使用 withStyles 函数将样式应用到你的组件
import { Text as RNText } from 'react-native';import { withStyles } from '@blankapp/ui';// 为了方便,这里直接将 `Text` 组件应用上了 `Title` 样式。const Title = withStyles('Title')(RNText);export default Title;

基础组件

以下通过一些简单的示例组件代码,让你更快入门本项目。

Button

禁用状态

加载中状态

尺寸的变化形式

CheckBox

禁用状态

选中状态

项目讨论

如果你对本项目有任何建议或问题,可以通过 或本人私人微信进行讨论。

PS. 目前我的团队(深圳)正在招聘 ReactJS 和 React Native 的工程师,欢迎自荐或推荐优秀人才。

参考项目

相关链接

  • 源码地址:
  • 文档地址:

转载于:https://my.oschina.net/lijy91/blog/1524583

你可能感兴趣的文章
Linux centos PXE无人值守安装 DHCP+TFTP+FTP+Kickstart
查看>>
Chrome扩展:让你使用浏览器打开Office文件
查看>>
聊聊spring cloud netflix的HystrixCommands
查看>>
聊聊openmessaging-java
查看>>
arp欺骗
查看>>
12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配
查看>>
你绝对想不到,居然可以用Word给长短不一的文本数字组合补0
查看>>
MySQL主从复制与读写分离
查看>>
从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
查看>>
android R文件丢失(R.java was modified manually! Reverting to generated version!)
查看>>
The Definitive Guide to Drupal 7
查看>>
部署ffmpeg及amr转mp3方法
查看>>
如何获取重载函数的地址 - 回复 "flq_00000" 的问题
查看>>
SPL笔记之双向链表
查看>>
论迭代式开发模式吸纳用户建议的困难度
查看>>
Delphi 2010 新增功能之: Rtti 单元(5): 获取方法的更多信息
查看>>
day2-Samba
查看>>
JavaScript 实现全角转半角 中文标点替换成英文标点
查看>>
Objective-c学习笔记(三)oc 多输入参数的方法及协议的使用及变量
查看>>
Linux学习笔记——文件操作
查看>>