欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

所用技術(shù)

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

解決方案:使用 React 的 useContext

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

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

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

useContext 創(chuàng)建上下文

在應(yī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 來(lái)獲取和設(shè)置選中狀態(tài)。那么下面我們來(lái)創(chuàng)建一個(gè)自定義組件TabBar

首先在app.config.js 這樣配置 主要是tabBar中的custom要為true隱藏默認(rèn)的Tabbar 也是為了后續(xù)跳轉(zhuǎn)做準(zhǔ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: "主頁(yè)",
      },
      {
        pagePath: "pages/classification/index",
        text: "分類(lèi)",
      },
      {
        pagePath: "pages/shoppingCart/index",
        text: "購(gòu)物車(chē)",
      },
      {
        pagePath: "pages/user/index",
        text: "我的",
      },
    ],
  },
  window: {
    backgroundTextStyle: "light",
    navigationBarBackgroundColor: "#fff",
    navigationBarTitleText: "WeChat",
    navigationBarTextStyle: "black",
  },
});

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

然后在Src目錄下創(chuàng)建 一個(gè)文件名為 custom-tab-bar 的文件夾 然后在文件夾里創(chuàng)建一個(gè)index.js 的文件 小程序會(huì)自動(dòng)獲取到此文件夾的index.js文件然后渲染到頁(yè)面上

// 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: '首頁(yè)',
                url: 'pages/index/index',
            },
            {
                id: 1,
                icon: 'qr',
                text: '分類(lèi)',
                url: 'pages/classification/indexe',
            },
            {
                id: 2,
                icon: 'shopping-cart-o',
                text: '購(gòu)物車(chē)',
                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>
    )
}

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

總結(jié)

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

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

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

相關(guān)文章

  • React使用fullpage.js實(shí)現(xiàn)整屏翻頁(yè)功能

    React使用fullpage.js實(shí)現(xiàn)整屏翻頁(yè)功能

    最近筆者在完成一個(gè)移動(dòng)端小項(xiàng)目的過(guò)程中需要實(shí)現(xiàn)整屏翻頁(yè)的效果;調(diào)研完畢之后,最終決定使用pullPage.js實(shí)現(xiàn)此功能,fullPage.js使用起來(lái)比較方便,并且官網(wǎng)上也給了在react項(xiàng)目中使用的demo,本文記錄了這個(gè)第三方庫(kù)的使用過(guò)程,感興趣的朋友可以參考下
    2023-11-11
  • 簡(jiǎn)析React Native startReactApplication 方法

    簡(jiǎn)析React Native startReactApplication 方法

    這篇文章主要介紹了React Native startReactApplication 方法簡(jiǎn)析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • React?正確使用useCallback?useMemo的方式

    React?正確使用useCallback?useMemo的方式

    這篇文章主要介紹了React?正確使用useCallback?useMemo的方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • react自適應(yīng)布局px轉(zhuǎn)rem實(shí)現(xiàn)示例詳解

    react自適應(yīng)布局px轉(zhuǎn)rem實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了react自適應(yīng)布局px轉(zhuǎn)rem實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • React利用props的children實(shí)現(xiàn)插槽功能

    React利用props的children實(shí)現(xiàn)插槽功能

    React中并沒(méi)有vue中的?slot?插槽概念?不過(guò)?可以通過(guò)props.children?實(shí)現(xiàn)類(lèi)似功能,本文為大家整理了實(shí)現(xiàn)的具體方,需要的可以參考一下
    2023-07-07
  • react之組件通信詳解

    react之組件通信詳解

    本篇文章主要介紹了React組件通信詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10
  • GraphQL在react中的應(yīng)用示例詳解

    GraphQL在react中的應(yīng)用示例詳解

    這篇文章主要為大家介紹了GraphQL在react中的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 解決React報(bào)錯(cuò)Cannot assign to 'current' because it is a read-only property

    解決React報(bào)錯(cuò)Cannot assign to 'current'

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Cannot assign to 'current' because it is a read-only property的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • react性能優(yōu)化達(dá)到最大化的方法 immutable.js使用的必要性

    react性能優(yōu)化達(dá)到最大化的方法 immutable.js使用的必要性

    這篇文章主要為大家詳細(xì)介紹了react性能優(yōu)化達(dá)到最大化的方法,一步一步優(yōu)化react性能的過(guò)程,告訴大家使用immutable.js的必要性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • webpack入門(mén)+react環(huán)境配置

    webpack入門(mén)+react環(huán)境配置

    webpack是一個(gè)前端資源模塊化管理和打包工具,說(shuō)白了就是方便我們管理自己的常用的一些代碼,比如你開(kāi)發(fā)中用到sass以及jade同時(shí)用到es6,開(kāi)發(fā)時(shí)你不可能改動(dòng)某個(gè)地方就挨個(gè)命令去轉(zhuǎn)換再到瀏覽器去看效果,那樣效率是非常低的。所以webpack幫我們省去了那些多余的步驟。
    2017-02-02

最新評(píng)論