IonTabButton 无法捕获 onClick 事件的问题

problem with IonTabButton not capturing onClick events

我正在使用 ionic 5 css 库进行反应。

我喜欢 IonTabButtons 的样式而不是 IonButtons,因为 IonTabButton 允许在图标下方放置文本。在屏幕截图中,我显示了所有显示为选项卡按钮的图标,但样式为 IonButton 的主页除外。

我喜欢 IonTabButton 的外观,但它没有 运行 onclick 函数(没有控制台语句)。

我的问题是 easier/better/possible a) 将 onClick 功能添加到 iontab 或 b) 使 IonButton 的显示方式与 IonTabButton 对图标和按钮下方所有文本的显示方式相同。

如果是选项 b) 你知道在哪里可以找到 IonButton 和 IonTabButton 的默认 css 属性以查看它们的不同之处/使两者看起来更容易做到。

import React from 'react'
import { useHistory } from 'react-router-dom'
import './Welcome.css'

// ionic lib imports
import {
   IonButton,
   IonCol,
   IonContent,
   IonGrid,
   IonIcon,
   IonLabel,
   IonPage,
   IonRow,
   IonTabButton
} from '@ionic/react'

// ionic icon imports
import {
   cog,
   help,
   home,
   power,
   walk
} from 'ionicons/icons'

const Welcome = (props) => {

   let history = useHistory()

   const handleHomeClick = () => {
      console.log('clicked')
      history.push('./Running')
   }

   return(
      <IonPage>
         <IonContent>
            <IonGrid>
               <IonRow>
                  <IonCol size='6'>
                     <IonButton
                        fill='clear'
                        onClick={handleHomeClick}
                     >
                        <IonIcon icon={home} />
                        Home
                     </IonButton>
                  </IonCol>
                  <IonCol size='6'>
                     <IonTabButton
                        fill='clear'
                        onClick={handleHomeClick}
                     >
                        <IonIcon icon={walk}></IonIcon>
                        <IonLabel> Jog </IonLabel>
                     </IonTabButton>
                  </IonCol>
               </IonRow>
               <IonRow>
                  <IonCol size='6'>
                     <IonTabButton
                        fill='clear'
                        onClick={handleHomeClick}
                     >
                        <IonIcon icon={cog}></IonIcon>
                        <IonLabel> Settings </IonLabel>
                     </IonTabButton>
                  </IonCol>
                  <IonCol size='6'>
                     <IonTabButton
                        fill='clear'
                        onClick={handleHomeClick}
                     >
                        <IonIcon icon={help}></IonIcon>
                        <IonLabel> Help </IonLabel>
                     </IonTabButton>
                  </IonCol>
               </IonRow>
               <IonRow>
                  <IonCol size='6'>
                     <IonTabButton
                        fill='clear'
                        onClick={handleHomeClick}
                     >
                        <IonIcon icon={power}></IonIcon>
                        <IonLabel> Power </IonLabel>
                     </IonTabButton>
                  </IonCol>
               </IonRow>
            </IonGrid>
         </IonContent>
      </IonPage>
   )
}

export default Welcome



/* CSS Rules For Welcome.js  */

ion-icon {
   font-size: 128px;
   color: white;
}

ion-grid {
   padding-top: 120px;
}

ion-col {
   justify-content: center;
}

ion-row {
   margin: 15px;
}

ion-button {
   height: 128px;
   width: 128px;
   line-height: 10px;
}

ion-label {
   font-size: 24px;
}


这是我能做的最好的了。我将 IonTabButton 切换为 IonButton 并尝试以相同的方式设置样式。我必须添加以下 css:

.transparent{
    background-color: #0000;
}
.big-text{
    font-size: 150%;
}
.fill{
    width: 100%;
    height: 100%;
}

我添加了以下内容class:

interface ButtonInterface{
    icon: any;
    label: string;
    callback(): any;
}

const Button = ({icon,label,callback}:ButtonInterface)=>{
    return (
    <IonItem lines="none">
        <IonButton
           fill='clear'
           onClick={callback}
           color="dark"
           className="fill"
        >
        <IonList className="transparent">
            <IonIcon
               className="big-text"
               icon={icon}
            />
            <IonLabel>{label}</IonLabel>
        </IonList>
        </IonButton>
    </IonItem>
    );
}

那么这就是你的 html 的样子:

<IonPage>
    <IonContent>
        <IonGrid>
            <IonRow>
                <IonCol size='6'>
                    <Button icon={home} label="Home" callback={handleHomeClick} />
                </IonCol>
                <IonCol size='6'>
                    <Button icon={walk} label="Jog" callback={handleHomeClick} />
                </IonCol>
            </IonRow>
            <IonRow>
                <IonCol size='6'>
                    <Button icon={cog} label="Settings" callback={handleHomeClick} />
                </IonCol>
                <IonCol size='6'>
                    <Button icon={help} label="Help" callback={handleHomeClick} />
                </IonCol>
            </IonRow>
            <IonRow>
                <IonCol size='6'>
                    <Button icon={power} label="Power" callback={handleHomeClick} />
                </IonCol>
            </IonRow>
        </IonGrid>
    </IonContent>
</IonPage>