Taro学习记录(具体项目实践)

一、安装taro-cli

全局安装taro-cli脚手架,node版本 >= 12.0.0(官方要求)

npm install -g @tarojs/cli          //npm全局安装taro-cli(国外服务器安装)

yarn global add @tarojs/cli         //yarn全局安装taro-cli(国外服务器)

cnpm install -g @tarojs/cli         //cnpm全局安装taro-cli(国内服务器安装)

npm info @tarojs/cli                //查看taro全部版本信息

项目初始化

//使用命令进行创建模板项目

Taro init [项目名]

//npm 在5.2+版本以上可以在不全局安装的情况下使用npx创建模板项目

npx @tarojs/cli init [项目名]

二、项目文件

三、项目搭建

1、Eslint配置

在项目生成的 .eslintrc 中进行配置

{
  "extends": ["taro/react"],          //一个配置文件,可以被基础配置中的已启用的规则继承
  "parser": "@babel/eslint-parser",  //指定ESLint解析器
  "rules": {
    "react/jsx-uses-react": "off",
    "react/react-in-jsx-scope": "off",
    "no-unused-vars": ["error", {"varsIgnorePattern":"Taro|wx"}],
    "no-mixed-spaces-and-tabs": 2,                //禁止混用tab和空格    
    "no-debugger": 2,                             //禁用debugger
    "space-infix-ops": 2,                         //操作符周围要有空格
    "space-before-blocks": 2,                     //语句块之前要有空格
    "indent": [ "error", 2, {"SwitchCase": 1}],   //缩进风格,2个空格,switch语句的case后面也要有空格
    "jsx-quotes": [ "error", "prefer-double" ],   //jsx属性使用单引号
    "import/first":0                              //import语句放在文件开头
  }
}

2、工具

husky:git hook工具,用来配置npm脚本

lint-staged:检查本地代码的改动,只校验改动过的文件,大大提高校验效率

下载husky、lint-staged工具包

cnpm i -D husky lint-staged

下载工具包之后,在package.json中进行配置

3、项目的全局配置(app.config.ts)

1、配置页面路由

用于指定小程序由哪些页面组成,每一项都对应一个页面的 路径 + 文件名 信息。文件名不需要写文件后缀,框架会自动去寻找对应位置的文件进行处理。

数组的第一项代表小程序的初始页面(首页)。小程序中新增/减少页面,都需要对 pages 数组进行修改

2、window

用于设置小程序的状态栏、导航条、标题、窗口背景色

3、tabBar

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。

 list 接受一个数组,只能配置最少 2 个、最多 5 个 tab。tab 按数组的顺序排序,每个项都是一个对象

具体配置代码如下:

export default defineAppConfig({
  pages: [                                                        // 页面
    'pages/index/index',
    'pages/order/order',
  ],
  window: {                                                       // 窗口
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationBarTextStyle: 'black'
  },
  tabBar: {                                                       // 底部导航栏
    color: '#999',
    selectedColor: '#333',
    backgroundColor: '#fff',
    borderStyle: 'white',
    list: [
      {
        pagePath: 'pages/index/index',                             // 页面路径
        text: '首页',                                              // 文字
        iconPath: 'assets/images/index-unselected.png',            // 未选中图标
        selectedIconPath: 'assets/images/index-selected.png'       // 选中图标
      },
      {
        pagePath: 'pages/order/order',
        text: '订单',
        iconPath: 'assets/images/order-unselected.png',
        selectedIconPath: 'assets/images/order-selected.png'
      }
    ] 
  }
})

4、在微信开发者工具中展示小程序页面

执行编译命令

npm run dev:weapp

执行命令后,会出现一个dist文件夹,使用微信开发者工具打开该文件夹即可查看小程序页面 

运行展示页面:

四、具体页面编写

1、配置页面设置

配置【index.config.ts】文件

2、使用Taro中的组件库写页面

写首页顶部Tab【index.tsx】

import { View } from '@tarojs/components'         //从components中导出组件
import {  } from '@tarojs/taro'
import './index.less'
import { Component } from 'react'

//定义接口
class State {
  tabIndex: number;
  constructor () {
    this.tabIndex = 0;
  }
}


//获取tab的数据
const DEFAULT_TAB_LIST = [
  { title:'机票', tab:'flight', index: 0 },
  { title:'火车票', tab:'train', index: 1 },
  { title:'汽车票', tab:'car', index: 2 },
  { title:'酒店', tab:'boat', index: 3 },
]


export default class Index extends Component<{}, State> {

  //当前选中的tab
  constructor(props){
    super(props)
    this.state = {
      tabIndex: 0,       //默认选中第一个tab
    }
  }


  //点击事件切换tab
  switchTab = (index)=> {
    this.setState({
      tabIndex: index,
    })
  }

  render() {
    //接收tabIndex的最新值
    const { tabIndex } = this.state

    //动态计算行内样式
    const innerstyle = {
      width: `${100 / DEFAULT_TAB_LIST.length}%`,
      transform: `translateX(${tabIndex * 100 })`
    }


    return (
      <View className='index'>
        <View className='top'>
          <View className='index-tab'>
            {
              DEFAULT_TAB_LIST.map(item => (
                <view key={item.tab} className={`index_tab_item  ${item.tab}  ${tabIndex === item.index ? 'current' : ''}`} onClick={() => this.switchTab(item.index)}>
                  {item.title}
                </view>
              ))
            }
          </View>
          <View className='scrollbar' style={ innerstyle }></View>
        </View>
        {
          DEFAULT_TAB_LIST[tabIndex]['tab'] === "flight" ? (
            <View className='content'>flight</View>
          ) : <View className='content'>占位</View>
        }
      </View>
    )
  }
}

样式【index.less】

待补充

自定义Tab组件

(以机票页为例)

在pages中新建文件夹【flight】->【新建文件夹index】->【新建index.tsx、index.less】

页面级的目录不需要index.config.tsx文件

导入依赖【index.tsx】

import { PureComponent, ReactNode } from "react";
import { View } from "@tarojs/components";
//引入样式文件
import "./index.scss";

//引入自定义组件
import MiniTab from '../../../components/Tab/index'

const FLIGHT_TABS = [
    {
        label:'单程',
        id:0,
    },
    {
        label:'往返',
        id:1,
    },
    {
        label:'多程',
        id:2,
    }
]
export default class FlightIndex extends PureComponent {
    render(): ReactNode {
        return (
            <View className="flight-container">
                <View className="flight-top">
                    <MiniTab tabList={FLIGHT_TABS}></MiniTab>
                </View>
            </View>
        );
    }
}

【components/No-use子组件】

【No-use/index.tsx】

import { View } from "@tarojs/components";
import { PureComponent, ReactNode } from "react";

import "./index.scss";

const NO_EXPLOIT = "暂未开发,敬请期待!"

//定义props接口
interface IProps {
    content?: string;
    className?: string;
}

export default class NoUseIndex extends PureComponent<IProps> {
    render(): ReactNode {
        const { content = NO_EXPLOIT, className = "" } = this.props
        return (
            <View className={`no-exploit ${className}`}>{content}</View>
        )
    }
}

在【index/index.tsx】中引用,即可使用子组件

//引入自定义组件
import FlightIndex from '../flight/index'
import NoUseIndex from '../../components/No-use/index'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值