小程序----前(taro3.x+taroUI3.0)后(express+mongodb)端通信

在上一篇文章中,已经把服务器搭建好了,这篇文章主要是阐述taro3.x集成taroUI以及与服务器通信

一、安装taroUI3.0

因为使用的是taro3.x版本,并不兼容taroUI的正式版(当前版本:2.3.4),所以得安装指定版本才行

yarn add taro-ui@beta

选择3.0以上版本安装。

npm安装流程:

npm view taro-ui versions

npm install taro-ui@3.0.0-alpha.10 --save

至此,已经安装好taroUI,可以根据官方文档进行配置和使用了。

注:在使用taroUI的AtTabBar组件时,需要在app.config.ts文件中配置tabBar属性

// app.config.ts
export default {
  pages: [
    'pages/home/index',
    'pages/my/index',
  ],
  tabBar: {
    custom: true,
    color: '#000000',
    selectedColor: '#f034c1',
    backgroundColor: '#ffffff',
    borderStyle: 'white',
    list: [
      {
        pagePath: 'pages/home/index',
        text: '首页',
      },
      {
        pagePath: 'pages/my/index',
        text: '我的',
      }
    ]
  },
  window: {
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationBarTextStyle: 'black'
  }
}

然后在各个模块的主页面使用即可

// src/pages/home/index
import React from 'react';
import Taro from "@tarojs/taro";
import { View } from '@tarojs/components';
import { observer } from 'mobx-react';
import { AtButton, AtTabBar } from 'taro-ui';
import { useStores } from '../../hooks/use-stores';
import './index.scss'

export const Home = observer(() => {

  const { tabStore } = useStores();
  const { tabIndex } = tabStore;

  const handleClick = (value) => {
    if (value === 0) return;
    Taro.switchTab({
      url: "/pages/my/index"
    });
    tabStore.changeTab(value);
  }

  return (
    <View className='homeContainer'>
      <View>我是首页</View>
      <AtTabBar
        fixed
        tabList={[
          { title: '首页', iconType: 'home' },
          { title: '我的', iconType: 'user' }
        ]}
        onClick={handleClick}
        current={tabIndex}
      />
    </View>
  )
})

export default Home

二、配置services

在src目录下创建services文件夹,并创建api.ts、config.js文件

// src/services/api
import Taro from '@tarojs/taro'
import { HTTP_STATUS } from './status'
import { baseUrl } from './config'
import { logError } from '../utils/error'

export default {
  baseOptions(params, method = 'GET') {
    let { url, data } = params
    // let token = getApp().globalData.token
    // if (!token) login()
    console.log('params', params)
    let contentType = 'application/x-www-form-urlencoded'
    contentType = params.contentType || contentType
    type OptionType = {
      url: string,
      data?: object | string,
      method?: any,
      header: object,
      success: any,
      error: any,
      // xhrFields: object,
    }
    const option: OptionType = {
      url: baseUrl + url,
      data: data,
      method: method,
      // header: { 'content-type': contentType, 'token': token },
      header: { 'content-type': contentType },
      // xhrFields: { withCredentials: true },
      success(res) {
        if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
          return logError('api', '请求资源不存在')
        } else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
          return logError('api', '服务端出现了问题')
        } else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
          return logError('api', '没有权限访问')
        } else if (res.statusCode === HTTP_STATUS.SUCCESS) {
          return res.data
        }
      },
      error(e) {
        logError('api', '请求接口出现问题', e)
      }
    }
    return Taro.request(option)
  },
  get(url, data?: object) {
    let option = { url, data }
    return this.baseOptions(option)
  },
  post: function (url, data?: object, contentType?: string) {
    let params = { url, data, contentType }
    return this.baseOptions(params, 'POST')
  },
  put(url, data?: object) {
    let option = { url, data }
    return this.baseOptions(option, 'PUT')
  },
  delete(url, data?: object) {
    let option = { url, data }
    return this.baseOptions(option, 'DELETE')
  }
}
// src/services/config
export const baseUrl = 'http://localhost:3000/';

在相关页面调用即可

// src/pages/home/index
// ......
import api from '../../services/api';

export const Home = observer(() => {

  // ......
  const getData = () => {
    api.get('products').then((res) => {
      productStore.productList = [...productStore.productList, ...res.data];
    })
  };

  return (
    <View className='homeContainer'>
      <AtButton type='primary' onClick={getData}>获取数据</AtButton>
      <View>获取的数据在这:{JSON.stringify(productStore.productList)}</View>
    </View>
  )
})

export default Home

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值