目标:在单击三个按钮中的一个按钮后,我应该显示特定按钮的特定内容.然后,在单击特定按钮后,所有三个按钮都应该隐藏,并替换为所单击的特定按钮的内容.

问题:我try 传递props 并在条件呈现方面使用If-Else语句,但由于其余If-Else语句被忽略,因此我很难弄清楚如何正确地声明该功能工作的条件.只有牛肉按钮在工作,但其他按钮都不工作.

源代码:

import * as React from "react";
import { Stack } from '@mui/material';
import FoodTraysItemButton from "./FoodTraysItemButton";
import PastaNoodlesButtonsFT from "./foodTraysPages/PastaNoodlesButtonsFT";
import DessertsButtonsFT from "./foodTraysPages/DessertsButtonsFT";
import BeefButtonsFT from "./foodTraysPages/BeefButtonsFT";
import { useState } from "react";

function preventDefault(event) {
  event.preventDefault();
}

export default function FoodTraysButtons(props) {
  const [myBoolBeef, setmyBoolBeef] = useState(true);
  const [myBoolDesserts, setmyBoolDesserts] = useState(true);
  const [myBoolPastaNoodles, setmyBoolPastaNoodles] = useState(true);
  
   function toggleBoolBeef() {
     setmyBoolBeef(!myBoolBeef);
   }

    function toggleBoolDesserts() {
      setmyBoolDesserts(!myBoolDesserts);
    } 

    function toggleBoolPastaNoodles() {
      setmyBoolPastaNoodles(!myBoolPastaNoodles);
    }

  return (
    // stuck here:   (I plan to use multiple separate if else statements to work the functionality out but it doesn't work)
    <React.Fragment> 
     {(() => {
         // only works here
        if (myBoolBeef) {
          return (<Landing toggleBoolBeef={toggleBoolBeef} />);
        } else{
          return <BeefFT/>;
        }
      
// these are ignored:
        if (myBoolDesserts) {
          return (<Landing toggleBoolDesserts={toggleBoolDesserts} />);
        } else{
          return <DessertsFT/>;
        } 

        if (myBoolPastaNoodles) {
          return (<Landing toggleBoolPastaNoodles={toggleBoolPastaNoodles} />);
        } else{
          return <PastaNoodlesFT/>;
        } 


      })()}
    </React.Fragment>
  );

}

function Landing(props) {
  return (
    <div>
      <Stack spacing={0} direction="row" sx={{ mb: 4.5 }}>
        <FoodTraysItemButton
          title="Beef"
          onClick={props.toggleBoolBeef}
        />
      
        <FoodTraysItemButton
          title="Desserts"
          onClick={props.toggleBoolDesserts}
        />
        <FoodTraysItemButton title="Pasta/Noodles" onClick={props.toggleBoolPastaNoodles} />
      
      </Stack>
     

    </div>
  );
}

function BeefFT() {
  return (
    <div>
      <BeefButtonsFT />
    </div>
  );
}


function DessertsFT() {
  return (
    <div>
      <DessertsButtonsFT />
    </div>
  );
}

function PastaNoodlesFT() {
  return (
    <div>
      <PastaNoodlesButtonsFT />
    </div>
  );
}

Codesandbox中的完整源代码:https://codesandbox.io/s/show-hide-buttons-ralph-ecv9g2?file=/src/FoodTraysButtons.jsx:773-815

它应该是什么样子的:

Beef button: beefff

beef

Desserts button: deessers

desserts

Pasta Noodles button: pasta

pastaaaa

为了实现它的功能,我应该以什么方式实现它?

您的回复将非常感谢,因为我正在探索MUI和react 的时刻.这会对我的项目有很大的帮助.非常感谢!

推荐答案

更新FoodTraysButtons以保存单个状态selection,然后使用该状态有条件地呈现Landing组件或BeefFTDessertsFTPastaNoodlesFT组件中的任何组件.

export default function FoodTraysButtons(props) {
  const [selection, setSelection] = useState();

  const selectHandler = (selection) => setSelection(selection);

  return (
    <React.Fragment>
      {!selection && <Landing onSelect={selectHandler} />}
      {selection === "beef" && <BeefFT />}
      {selection === "dessets" && <DessertsFT />}
      {selection === "pastaNoodles" && <PastaNoodlesFT />}
    </React.Fragment>
  );
}

更新Landing组件以接受单个onSelectprops 回调.

function Landing({ onSelect }) {
  const selectHandler = (selection) => () => onSelect(selection);
  return (
    <div>
      <Stack spacing={0} direction="row" sx={{ mb: 4.5 }}>
        <FoodTraysItemButton title="Beef" onClick={selectHandler("beef")} />
        <FoodTraysItemButton
          title="Desserts"
          onClick={selectHandler("desserts")}
        />
        <FoodTraysItemButton
          title="Pasta/Noodles"
          onClick={selectHandler("pastaNoodles")}
        />
      </Stack>
    </div>
  );
}

Edit how-to-display-the-content-of-a-specific-button-after-one-of-three-buttons-is-cl

Reactjs相关问答推荐

从app.js导航,这是在BrowserRouter包装之外

安装后未渲染tailwind

react 挂钩-使用有效澄清

我如何在不被 destruct 的情况下将导航栏固定在顶部?

REACTION-Easy-SORT返回.map错误

点击页脚链接时,如何更改ReactJS导航栏中的活动菜单项(样式为Tailwind CSS)?

React路由dom布局隐藏内容

如何在 React Hook Form 中使用嵌套对象处理错误验证消息

从 redux 调用UPDATE_DATA操作时状态变得未定义

使用reactrouterdom时显示"对象无效作为React子组件"错误

useState数组不更新

React设置上下文并进行导航

React对象值下降2次而不是1次

React 测试库包装器组件

Next.js i18n 路由不适用于动态路由

React - 使用 React 显示错误和积极alert

react-admin useGetIdentity 只返回全名,id 未定义 头像未定义

在表格中显示具有自定义声明的用户状态

哪个是创建 React 应用程序的更好方法?

如何在 React JS 上使文本中的单词可点击