所用技术
Taro,React HooKs(useContext , createContext),@antmjs/vantui(这是UI组件)
背景
在使用 Taro 进行小程序开发时,底部 TabBar 是非常常见的页面导航方式。然而,有时候我们可能会遇到一个问题:底部 TabBar 的选中状态异常,需要点击两次才能成功选中某个标签。本文将介绍如何使用 React 的 useContext 来解决这个问题,同时结合 Taro 的自定义 TabBar 来实现正常的底部导航。
解决方案
使用 React 的 useContext
在 Taro 中,我们可以使用 useContext 钩子来创建和使用上下文。上下文能够在组件之间共享数据,这里我们将使用它来解决底部选中异常的问题。
- 首先,我们需要创建一个上下文对象,用来管理底部 TabBar 的选中状态。
// UserContext.js
import { createContext } from 'react';
const UserContext = createContext();
export default UserContext;
- 在应用的入口文件app.js中,我们将使用 useContext 创建上下文,并将底部 TabBar 的选中状态放入上下文中。
// app.js
import { useState } from 'react';
import Taro, { createContext, Provider } from '@tarojs/taro';
import './app.scss';
import UserContext from './UserContext';
function App({ children }) {
const [selectedTab, setSelectedTab] = useState(0);
return (
{children}
);
}
export default App;
现在,我们可以在任何组件中使用 useContext 来获取和设置选中状态。那么下面我们来创建一个自定义组件TabBar
- 首先在app.config.js 这样配置 主要是tabBar中的custom要为true隐藏默认的Tabbar 也是为了后续跳转做准备
//app.config.js
export default defineAppConfig({
pages: [
"pages/index/index",
"pages/classification/index",
"pages/shoppingCart/index",
"pages/user/index",
],
tabBar: {
custom: true,
list: [
{
pagePath: "pages/index/index",
text: "主页",
},
{
pagePath: "pages/classification/index",
text: "分类",
},
{
pagePath: "pages/shoppingCart/index",
text: "购物车",
},
{
pagePath: "pages/user/index",
text: "我的",
},
],
},
window: {
backgroundTextStyle: "light",
navigationBarBackgroundColor: "#fff",
navigationBarTitleText: "WeChat",
navigationBarTextStyle: "black",
},
});
- 然后在Src目录下创建 一个文件名为 custom-tab-bar 的文件夹 然后在文件夹里创建一个index.js 的文件 小程序会自动获取到此文件夹的index.js文件然后渲染到页面上
// custom-tab-bar/index.js
import { Tabbar, TabbarItem } from '@antmjs/vantui'
import Taro from '@tarojs/taro'
import React, { useEffect, useRef, useState } from 'react'
import { useContext } from 'react';
import UserContext from '../component/UserContext';
export default function index() {
const { selectedTab, setSelectedTab} = useContext(UserContext);
const [tabData, setTabData] = useState({
list: [
{
id: 0,
icon: 'home-o',
text: '首页',
url: 'pages/index/index',
},
{
id: 1,
icon: 'qr',
text: '分类',
url: 'pages/classification/indexe',
},
{
id: 2,
icon: 'shopping-cart-o',
text: '购物车',
url: 'pages/shoppingCart/index',
},
{
id: 3,
icon: 'manager-o',
text: '我的',
url: 'pages/user/index',
},
]
})
const onChange = (e) => {
setSelectedTab(e.detail)
if (e.detail == 0) {
Taro.switchTab({
url: '/pages/index/index'
})
} else if (e.detail == 1) {
Taro.switchTab({
url: '/pages/classification/index'
})
} else if (e.detail == 2) {
Taro.switchTab({
url: '/pages/shoppingCart/index'
})
} else if (e.detail == 3) {
Taro.switchTab({
url: '/pages/user/index'
})
}
}
return (
{tabData.list.map(Item => {
return
{Item.text}
})}
)
}
通过使用 useContext,我们可以将选中状态在不同的组件之间共享,从而解决底部选中异常问题。这样,点击底部标签时就可以正常切换选中状态了。
总结
使用 Taro React,我们可以使用 useContext 钩子来解决底部 TabBar 选中异常的问题。通过创建上下文并共享选中状态,我们可以实现正常的底部导航,提供更好的用户体验。
希望本文能够帮助你解决底部选中异常问题,并在 Taro 小程序开发中有更流畅的导航体验。如果你在实践中遇到问题或有更多建议,欢迎在评论中分享!