1、px转dp (stylesKits.js)
// 设计稿的宽度 / 元素的宽度 = 手机屏幕 / 手机中元素的宽度 // 左边是px = 右边是dp // => 手机中元素的宽度 = 手机屏幕 * 元素的宽度 / 设计稿的宽度 import { Dimensions } from 'react-native' /** * 屏幕的宽度 */ export const screenWidth=Dimensions.get("window").width /** * 屏幕的高度 */ export const screenHeight=Dimensions.get("window").height /** * 将px转为dp * @param {Number} elePx 元素的宽度或者高度 单位 px */ export const pxToDp=(elePx)=> screenWidth * elePx / 375 复制代码
使用
import React, { Component } from 'react' import { View, Image, StatusBar } from 'react-native' import { pxToDp } from "../../../utils/stylesKits" class Index extends Component { render() { return ( <View> {/* 0.0状态栏开始 */} <StatusBar backgroundColor="transparent" translucent={ true } /> {/* 0.0状态栏结束 */} {/* 1.0 背景图片 开始 */} <Image style={{ width: "100%", height: pxToDp(200) }} source={ require('../../../res/profileBackground.jpg') }></Image> {/* 1.0 背景图片 结束 */} </View> ) } } export default Index 复制代码
2、正则校验器(校验手机号码和富文本)validator.js
export default { /** * 校验手机号码 * @param {Number} phone */ validatePhone(phone) { const reg = /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/; return reg.test(phone) }, /** * 匹配富文本 * @param {String} text 富文本内容 */ renderRichText(text) { // 声明最终要拿到的数组 const finalList = []; // 定义一下正则 const rule = /(/{.+?})/g; // 匹配后的图片字符的数组 // ["/{fadai}", "/{fanu}", "/{aoman}"] const emoArr = text.match(rule); if (emoArr === null) { finalList.push({ text: text }); } else { // "广东人以后¥¥搞笑¥¥¥¥吃饭" // ["广东人以后","","搞笑","","","吃饭"] // ["/{fadai}", "/{fanu}", "/{aoman}"] const textArr = text.replace(rule, "¥¥").split("¥¥");//["广东人以后","","搞笑","","","吃饭"] while (textArr.length) { finalList.push({ text: textArr.shift() }); if (emoArr.length) { finalList.push({ image: emoArr.shift() }); } } } return finalList; } } 复制代码
4、请求封装(request.js) axios
import axios from 'axios' import { BASE_URI } from './pathMap' import Toast from './Toast' const instance = axios.create({ baseURL: BASE_URI }) // 添加请求拦截器 instance.interceptors.request.use(function (config) { // 在发送请求之前做些什么 Toast.showLoading('正在请求中...') return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); // 添加响应拦截器 instance.interceptors.response.use(function (response) { // 对响应数据做点什么 Toast.hideLoading() return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); }); export default { get: instance.get, post: instance.post } 复制代码
5、小提示框封装(Toast.js)
import React from 'react' import { ActivityIndicator } from 'react-native' import { Toast, Theme } from 'teaset' let customKey = null; Toast.showLoading = (text) => { if (customKey) return; customKey = Toast.show({ text, icon: <ActivityIndicator size='large' color={Theme.toastIconTintColor} />, position: 'center', duration: 100000, }); } Toast.hideLoading = () => { if (!customKey) return; Toast.hide(customKey); customKey = null; } export default Toast