前端组件库Taro UI知识点大全(二)

简介: 教程来源 https://bncne.cn/sheyingjiqiao.html 本文详解Taro UI核心组件(AtButton、AtLoadMore、表单组件、AtMessage)用法及多端适配方案,涵盖按钮类型/状态/尺寸、加载更多三态控制、表单交互与全局提示,并介绍SCSS主题定制、样式覆盖及跨平台(小程序/H5/RN)开发最佳实践。

三、核心组件详解

3.1 按钮组件 AtButton
按钮是用户交互中最基础的组件,Taro UI提供了AtButton组件,支持多种类型和状态。

基本用法

import { AtButton } from 'taro-ui'

// 主要按钮
<AtButton type='primary'>主要按钮</AtButton>

// 次要按钮
<AtButton type='secondary'>次要按钮</AdaButton>

// 警告按钮
<AtButton type='warn'>警告按钮</AtButton>

// 禁用状态
<AtButton disabled>禁用按钮</AtButton>

// 加载状态
<AtButton loading>加载中</AtButton>

按钮尺寸

<AtButton size='normal'>正常尺寸</AtButton>
<AtButton size='small'>小尺寸</AtButton>

完整示例:带事件处理的按钮

import { AtButton } from 'taro-ui'
import { useState } from 'react'

export default function ButtonDemo() {
  const [loading, setLoading] = useState(false)

  const handleClick = async () => {
    setLoading(true)
    // 模拟异步操作
    await new Promise(resolve => setTimeout(resolve, 2000))
    setLoading(false)
  }

  return (
    <AtButton 
      type='primary' 
      loading={loading}
      onClick={handleClick}
    >
      点击加载
    </AtButton>
  )
}

3.2 加载更多组件 AtLoadMore
AtLoadMore组件是实现无限滚动和分页加载的核心组件,常用于列表底部展示加载状态。

三种状态说明
image.png
基本用法

import { AtLoadMore } from 'taro-ui'

export default class ListPage extends Component {
  state = {
    status: 'more',  // more / loading / noMore
    page: 1,
    list: []
  }

  handleLoadMore = () => {
    this.setState({ status: 'loading' })

    // 请求下一页数据
    fetchData(this.state.page + 1).then(newData => {
      if (newData.length === 0) {
        this.setState({ status: 'noMore' })
      } else {
        this.setState({
          list: [...this.state.list, ...newData],
          page: this.state.page + 1,
          status: 'more'
        })
      }
    })
  }

  render() {
    return (
      <View>
        {/* 列表内容 */}
        {this.state.list.map(item => (
          <View key={item.id}>{item.name}</View>
        ))}

        {/* 加载更多组件 */}
        <AtLoadMore 
          status={this.state.status}
          onClick={this.handleLoadMore}
        />
      </View>
    )
  }
}

自定义文案

<AtLoadMore 
  status='more'
  moreText='点击加载更多'
  loadingText='正在加载中...'
  noMoreText='已经到底了'
/>

3.3 表单组件
Taro UI提供了完整的表单组件体系,包括输入框、单选框、多选框、开关等。

输入框 AtInput

import { AtInput } from 'taro-ui'

<AtInput
  name='username'
  title='用户名'
  type='text'
  placeholder='请输入用户名'
  value={username}
  onChange={value => this.setState({ username: value })}
/>

<AtInput
  name='password'
  title='密码'
  type='password'
  placeholder='请输入密码'
  value={password}
  onChange={value => this.setState({ password: value })}
/>

开关 AtSwitch

import { AtSwitch } from 'taro-ui'

<AtSwitch
  title='接收通知'
  checked={checked}
  onChange={value => this.setState({ checked: value })}
/>

复选框 AtCheckbox

import { AtCheckbox } from 'taro-ui'

const options = [
  { value: 'apple', label: '苹果' },
  { value: 'banana', label: '香蕉' },
  { value: 'orange', label: '橙子' }
]

<AtCheckbox
  options={options}
  selectedList={selectedList}
  onChange={selectedList => this.setState({ selectedList })}
/>

完整表单示例

import { AtForm, AtInput, AtSwitch, AtButton } from 'taro-ui'

export default function RegisterForm() {
  const [formData, setFormData] = useState({
    username: '',
    phone: '',
    agree: false
  })

  const handleSubmit = () => {
    // 表单验证和提交逻辑
    console.log('提交数据:', formData)
  }

  return (
    <AtForm>
      <AtInput
        name='username'
        title='用户名'
        type='text'
        placeholder='请输入用户名'
        value={formData.username}
        onChange={value => setFormData({...formData, username: value})}
      />
      <AtInput
        name='phone'
        title='手机号'
        type='number'
        placeholder='请输入手机号'
        value={formData.phone}
        onChange={value => setFormData({...formData, phone: value})}
      />
      <AtSwitch
        title='同意用户协议'
        checked={formData.agree}
        onChange={value => setFormData({...formData, agree: value})}
      />
      <AtButton type='primary' onClick={handleSubmit}>注册</AtButton>
    </AtForm>
  )
}

3.4 消息提示组件 AtMessage
AtMessage用于在页面顶部显示全局提示信息,适用于操作反馈场景。

配置方式
在页面组件中配置AtMessage组件:

import { AtMessage } from 'taro-ui'

export default function MyPage() {
  return (
    <View>
      <AtMessage />
      {/* 页面其他内容 */}
    </View>
  )
}

使用方式

import Taro from '@tarojs/taro'

// 成功提示
Taro.atMessage({
  message: '操作成功',
  type: 'success'
})

// 错误提示
Taro.atMessage({
  message: '操作失败',
  type: 'error'
})

// 警告提示
Taro.atMessage({
  message: '请注意',
  type: 'warning'
})

四、主题定制与样式

4.1 SCSS变量定制
Taro UI基于SCSS编写,支持通过覆盖变量来定制主题。

创建自定义主题文件

// custom-theme.scss
// 覆盖默认主题变量

// 主色调
$color-brand: #16baaa !default;  // 默认是绿色,可以改成品牌色
$color-brand-light: #4bc7bc !default;
$color-brand-dark: #11a195 !default;

// 辅助色
$color-success: #07c160 !default;
$color-error: #ee0a24 !default;
$color-warning: #ff976a !default;

// 字体大小
$font-size-sm: 24px !default;
$font-size-base: 28px !default;
$font-size-lg: 32px !default;

// 导入Taro UI样式
@import 'taro-ui/dist/style/index.scss';

在项目中引入自定义主题

// app.js
import './custom-theme.scss'

4.2 自定义组件样式
除了全局主题定制,还可以通过className或style属性覆盖单个组件的样式。

<AtButton 
  className='custom-button'
  type='primary'
>
  自定义按钮
</AtButton>
// 对应的样式文件
.custom-button {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  border: none;
  border-radius: 48px;
}

4.3 多端样式适配
Taro支持使用条件编译语法来处理不同平台的样式差异。

// 根据平台显示不同样式
<View className={process.env.TARO_ENV === 'weapp' ? 'weapp-style' : 'h5-style'}>
  内容
</View>
/* 微信小程序特有样式 */
.weapp-style {
  font-size: 32px;  // 小程序使用rpx转换
}

/* H5特有样式 */
.h5-style {
  font-size: 16px;  // H5使用px
}

五、多端适配最佳实践

5.1 跨平台开发注意事项
Taro UI虽然支持多端运行,但在实际开发中仍需注意平台差异。

尺寸单位适配
Taro默认使用px作为尺寸单位,编译时会自动转换为各平台适配的单位:

小程序:转换为rpx

H5:保持px

RN:转换为pt

// 开发时直接使用px
.button {
  width: 200px;
  height: 80px;
  font-size: 28px;
}

平台特有功能处理

// 判断当前运行环境
if (process.env.TARO_ENV === 'weapp') {
  // 微信小程序特有逻辑
  wx.showShareMenu()
} else if (process.env.TARO_ENV === 'h5') {
  // H5特有逻辑
  window.location.href = '/share'
}

5.2 小程序生命周期适配
在使用Taro UI开发小程序时,需要注意组件生命周期与页面生命周期的差异。

页面生命周期(pages目录下)

import { Component } from 'react'

export default class MyPage extends Component {
  // 页面加载
  componentDidMount() { }

  // 页面卸载
  componentWillUnmount() { }

  // 页面显示(小程序特有)
  componentDidShow() { }

  // 页面隐藏(小程序特有)
  componentDidHide() { }

  // 下拉刷新
  onPullDownRefresh() { }

  // 上拉加载更多
  onReachBottom() { }

  render() {
    return <View>页面内容</View>
  }
}

组件生命周期(components目录下)

注意:onReachBottom等页面级生命周期在子组件中无效,必须在页面组件中处理。
5.3 最佳实践建议
按需引入组件:避免全局引入导致包体积过大

主题定制:通过SCSS变量统一管理品牌色

合理使用LoadMore:列表场景使用AtLoadMore实现分页加载

注意平台差异:小程序特有的API需要条件判断

保持版本同步:Taro和Taro UI版本需要匹配
来源:
https://bncne.cn/

相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32698 79
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17750 20
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36681 19
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24757 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36660 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29838 52

热门文章

最新文章

下一篇
开通oss服务