最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Taro?React自定義TabBar使用useContext解決底部選中異常

 更新時間:2023年08月31日 11:57:52   作者:故意避開  
這篇文章主要為大家介紹了Taro?React底部自定義TabBar使用React?useContext解決底部選中異常(需要點兩次才能選中的問題)示例詳解,有需要的朋友可以借鑒參考下

TabBar 的選中狀態(tài)異常

在使用 Taro 進行小程序開發(fā)時,底部 TabBar 是非常常見的頁面導航方式。然而,有時候我們可能會遇到一個問題:底部 TabBar 的選中狀態(tài)異常,需要點擊兩次才能成功選中某個標簽。本文將介紹如何使用 React 的 useContext 來解決這個問題,同時結(jié)合 Taro 的自定義 TabBar 來實現(xiàn)正常的底部導航。

所用技術

Taro,React HooKs(useContext  , createContext),@antmjs/vantui(這是UI組件)

解決方案:使用 React 的 useContext

在 Taro 中,我們可以使用 useContext 鉤子來創(chuàng)建和使用上下文。上下文能夠在組件之間共享數(shù)據(jù),這里我們將使用它來解決底部選中異常的問題。

創(chuàng)建上下文對象,管理底部TabBar選中狀態(tài)

// UserContext.js
import { createContext } from 'react';
const UserContext = createContext();
export default UserContext;

useContext 創(chuàng)建上下文

在應用的入口文件app.js中,我們將使用 useContext 創(chuàng)建上下文,并將底部 TabBar 的選中狀態(tài)放入上下文中。

// 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 (
    <UserContext.Provider value={{ selectedTab, setSelectedTab }}>
      {children}
    </UserContext.Provider>
  );
}
export default App;

自定義組件TabBar

現(xiàn)在,我們可以在任何組件中使用 useContext 來獲取和設置選中狀態(tài)。那么下面我們來創(chuàng)建一個自定義組件TabBar

首先在app.config.js 這樣配置 主要是tabBar中的custom要為true隱藏默認的Tabbar 也是為了后續(xù)跳轉(zhuǎn)做準備

//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",
  },
});

創(chuàng)建custom-tab-bar文件夾

然后在Src目錄下創(chuàng)建 一個文件名為 custom-tab-bar 的文件夾 然后在文件夾里創(chuàng)建一個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 (
        <Tabbar active={selectedTab} onChange={onChange}>
            {tabData.list.map(Item => {
                return <TabbarItem key={Item.id} icon={Item.icon}>
                    {Item.text}
                </TabbarItem>
            })}
        </Tabbar>
    )
}

通過使用 useContext,我們可以將選中狀態(tài)在不同的組件之間共享,從而解決底部選中異常問題。這樣,點擊底部標簽時就可以正常切換選中狀態(tài)了。

總結(jié)

使用 Taro React,我們可以使用 useContext 鉤子來解決底部 TabBar 選中異常的問題。通過創(chuàng)建上下文并共享選中狀態(tài),我們可以實現(xiàn)正常的底部導航,提供更好的用戶體驗。

希望本文能夠幫助你解決底部選中異常問題,并在 Taro 小程序開發(fā)中有更流暢的導航體驗。

以上就是Taro React自定義TabBar使用useContext解決底部選中異常的詳細內(nèi)容,更多關于React useContext底部選中的資料請關注腳本之家其它相關文章!

相關文章

  • react結(jié)合typescript?封裝組件實例詳解

    react結(jié)合typescript?封裝組件實例詳解

    這篇文章主要為大家介紹了react結(jié)合typescript?封裝組件實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • React Hook之使用Effect Hook的方法

    React Hook之使用Effect Hook的方法

    這篇文章主要為大家詳細介紹了React 使用Effect Hook的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • React?如何向url中添加參數(shù)

    React?如何向url中添加參數(shù)

    這篇文章主要介紹了React?如何向url中添加參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React創(chuàng)建組件的的方式匯總

    React創(chuàng)建組件的的方式匯總

    React 是一個用于構(gòu)建用戶界面的 JAVASCRIPT 庫。這篇文章主要介紹了React組件的兩種創(chuàng)建方式,一種是使用函數(shù)創(chuàng)建組件另一種是使用類創(chuàng)建組件,需要的朋友可以參考下
    2021-11-11
  • React?useEffect不支持async?function示例分析

    React?useEffect不支持async?function示例分析

    這篇文章主要為大家介紹了React?useEffect不支持async?function示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 每天一個hooks學習之useUnmount

    每天一個hooks學習之useUnmount

    這篇文章主要為大家介紹了每天一個hooks學習之useUnmount,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • React高階組件的使用淺析

    React高階組件的使用淺析

    高階組件就是接受一個組件作為參數(shù)并返回一個新組件(功能增強的組件)的函數(shù)。這里需要注意高階組件是一個函數(shù),并不是組件,這一點一定要注意,本文給大家分享React高階組件使用小結(jié),一起看看吧
    2022-08-08
  • React Native使用Modal自定義分享界面的示例代碼

    React Native使用Modal自定義分享界面的示例代碼

    本篇文章主要介紹了React Native使用Modal自定義分享界面的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 在React中實現(xiàn)子組件向父組件傳值的幾種方法

    在React中實現(xiàn)子組件向父組件傳值的幾種方法

    在React應用中,組件間的通信是常見的需求,通常,父組件通過props向子組件傳遞數(shù)據(jù),但有時也需要子組件向父組件傳遞數(shù)據(jù),本文將探討如何在React中實現(xiàn)子組件向父組件傳值的幾種方法,需要的朋友可以參考下
    2025-04-04
  • Remix路由模塊輸出對象loader函數(shù)詳解

    Remix路由模塊輸出對象loader函數(shù)詳解

    這篇文章主要為大家介紹了Remix路由模塊輸出對象loader函數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-04-04

最新評論

同仁县| 丹凤县| 黑水县| 麟游县| 苏尼特左旗| 融水| 宁武县| 双鸭山市| 铜山县| 临安市| 菏泽市| 保山市| 嘉善县| 阳新县| 区。| 凤冈县| 钟山县| 武陟县| 冷水江市| 师宗县| 昌邑市| 浦城县| 鄂伦春自治旗| 牡丹江市| 沧源| 武定县| 桦川县| 津南区| 石屏县| 吉水县| 灵台县| 麦盖提县| 舟曲县| 左贡县| 新河县| 沅江市| 合作市| 杭锦后旗| 弥勒县| 镇赉县| 开封县|