第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在反應(yīng)中修復(fù)抽屜內(nèi)的列表項(xiàng)

如何在反應(yīng)中修復(fù)抽屜內(nèi)的列表項(xiàng)

飲歌長(zhǎng)嘯 2022-12-02 15:58:30
幾天前,我在這里發(fā)布了一個(gè)問(wèn)題:如何在反應(yīng)中使用單一方法擴(kuò)展更多/更少的一個(gè)ListItem我在這里得到了一個(gè)不完整的答案,我接受了(不知道我為什么這樣做,看起來(lái)它一開始就起作用了)。我不得不承認(rèn)我在這里的問(wèn)題可能有點(diǎn)不清楚。所以,長(zhǎng)話短說(shuō),我想修復(fù)抽屜內(nèi)的列表項(xiàng)以使其正常工作。我的意思是:當(dāng)我點(diǎn)擊可擴(kuò)展項(xiàng)目時(shí),它應(yīng)該只擴(kuò)展那個(gè)(點(diǎn)擊的)項(xiàng)目。(這是有效的)當(dāng)我點(diǎn)擊另一個(gè)可擴(kuò)展項(xiàng)目時(shí),它應(yīng)該展開那個(gè)項(xiàng)目,但關(guān)閉之前打開的。(不工作)當(dāng)我單擊可擴(kuò)展項(xiàng)目?jī)?nèi)的項(xiàng)目時(shí)(在所有情況下都是查看或添加),它不應(yīng)關(guān)閉該可擴(kuò)展項(xiàng)目。(不工作,現(xiàn)在正在關(guān)閉所有項(xiàng)目)這是我的助手可擴(kuò)展項(xiàng)目組件的代碼:import { useState } from "react";const ExpandableItem = props => {  const [open, setOpen] = useState(false);  console.log(props.menuItemName);  return props.render({ open, setOpen });};export default ExpandableItem;我在 material-ui 上搜索并發(fā)現(xiàn)了類似的東西,但我無(wú)法合并它。這是 material-ui 手風(fēng)琴的鏈接:https://material-ui.com/components/accordion/如您所見(jiàn),Customized accordions 的功能與我需要的非常相似。如果展開一個(gè)可折疊組,它會(huì)顯示內(nèi)容。如果您之后選擇另一個(gè),它會(huì)擴(kuò)展并顯示內(nèi)容,并關(guān)閉前一個(gè)。解決這個(gè)問(wèn)題的最佳解決方案是什么?
查看完整描述

1 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

問(wèn)題是您沒(méi)有存儲(chǔ)當(dāng)前展開的面板名稱(或 ID)


import { useState } from "react";


const ExpandableItem = props => {

    const [itemState, setItemState] = useState({open: false, menuItemName: ""});


    console.log(props.menuItemName);

    return props.render({ itemState, setItemState });

};


export default ExpandableItem;

我已將變量 [open, setOpen] 重命名為 [itemState, setItemState],因此需要在其使用的任何地方進(jìn)行更改,(或者您可以添加單獨(dú)的變量來(lái)設(shè)置當(dāng)前選定的 menuName)


在您的 ExpandableItemContainer 中,在 onClick 處理程序中傳遞適當(dāng)?shù)闹?xprops.setItemState({open:!xprops.itemState.open, menuItemName}})


同樣在 Collapse 組件中將 in Prop 更改為


in={xprops.itemState.open && menuItemName === xprops.itemState.menuItemName}


  const ExpandableItemContainer = ({

    icon,

    menuItemName,

    firstItemName,

    firstItemLink,

    secondItemName,

    secondItemLink,

  }) => (

    <ExpandableItem

      render={(xprops) => (

        <>

          <ListItem button 

            onClick={

              (menuItemName) => xprops.setItemState({open:!xprops.itemState.open, menuItemName}})

            }

          >

            <ListItemIcon>{icon}</ListItemIcon>

            <ListItemText primary={menuItemName} />

            {xprops.open ? <ExpandLess /> : <ExpandMore />}

          </ListItem>

          <Collapse in={xprops.itemState.open} timeout="auto" unmountOnExit>

            <List component="div" disablePadding>

              <ListItem

                button

                className={classes.nested}

                component={Link}

                to={firstItemLink}

              >

                <ListItemIcon>

                  <VisibilityIcon />

                </ListItemIcon>

                <ListItemText primary={firstItemName} />

              </ListItem>

              <ListItem

                button

                className={classes.nested}

                component={Link}

                to={secondItemLink}

              >

                <ListItemIcon>

                  <AddIcon />

                </ListItemIcon>

                <ListItemText primary={secondItemName} />

              </ListItem>

            </List>

          </Collapse>

        </>

      )}

    />

  );

如果您想切換選擇,您需要將狀態(tài)保持在頂層(列表而不是 listItem 級(jí)別,如下所示


export default function SideBar() {

const classes = useStyles();

const gymId = 1;

const [itemState, setItemState] = React.useState({

    open: false,

    menuItemName: ""

});


const NonExpandableItemContainer = ({ icon, menuItemName, menuItemLink }) => (

    <ListItem button component={Link} to={menuItemLink}>

    <ListItemIcon>{icon}</ListItemIcon>

    <ListItemText primary={menuItemName} />

    </ListItem>

);


const ExpandableItemContainer = ({

    icon,

    menuItemName,

    firstItemName,

    firstItemLink,

    secondItemName,

    secondItemLink

}) => (

    <ExpandableItem

    render={xprops => (

        <>

        <ListItem

            button

            onClick={() =>

            setItemState({

                open:

                menuItemName === itemState.menuItemName

                    ? !itemState.open

                    : true,

                menuItemName

            })

            }

        >

            <ListItemIcon>{icon}</ListItemIcon>

            <ListItemText primary={menuItemName} />

            {itemState.open ? <ExpandLess /> : <ExpandMore />}

        </ListItem>

        <Collapse

            in={itemState.open && menuItemName === itemState.menuItemName}

            timeout="auto"

            unmountOnExit

        >

            <List component="div" disablePadding>

            <ListItem

                button

                className={classes.nested}

                component={Link}

                to={firstItemLink}

            >

                <ListItemIcon>

                <VisibilityIcon />

                </ListItemIcon>

                <ListItemText primary={firstItemName} />

            </ListItem>

            <ListItem

                button

                className={classes.nested}

                component={Link}

                to={secondItemLink}

            >

                <ListItemIcon>

                <AddIcon />

                </ListItemIcon>

                <ListItemText primary={secondItemName} />

            </ListItem>

            </List>

        </Collapse>

        </>

    )}

    />

);


return (

    <Drawer

    className={classes.drawer}

    variant="permanent"

    classes={{

        paper: classes.drawerPaper

    }}

    >

    <Toolbar />

    <div className={classes.drawerContainer}>

        <List

        component="nav"

        aria-labelledby="nested-list-subheader"

        className={classes.root}

        >

        <NonExpandableItemContainer

            icon={<HomeIcon />}

            menuItemName="Home"

            menuItemLink={"/gym/" + gymId + "/home"}

        />

        <ExpandableItemContainer

            icon={<SupervisorAccountIcon />}

            menuItemName="Administrators"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewAccount"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addAccount"}

        />

        <ExpandableItemContainer

            icon={<AccessibilityNewIcon />}

            menuItemName="Trainers"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewAccount"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addAccount"}

        />

        <ExpandableItemContainer

            icon={<FaceIcon />}

            menuItemName="Members"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewAccount"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addAccount"}

        />

        <ExpandableItemContainer

            icon={<FitnessCenterIcon />}

            menuItemName="Trainings"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewTrainings"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addTraining"}

        />

        <NonExpandableItemContainer

            icon={<EventIcon />}

            menuItemName="Training schedules"

            menuItemLink={"/gym/" + gymId + "/viewTrainingSchedules"}

        />

        <ExpandableItemContainer

            icon={<PanoramaWideAngleIcon />}

            menuItemName="Halls"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewHalls"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addHall"}

        />

        <ExpandableItemContainer

            icon={<ReceiptIcon />}

            menuItemName="Pricelist"

            firstItemName="View"

            firstItemLink={"/gym/" + gymId + "/viewPricelist"}

            secondItemName="Add"

            secondItemLink={"/gym/" + gymId + "/addPricelistItem"}

        />

        <NonExpandableItemContainer

            icon={<PhoneIcon />}

            menuItemName="Contact"

            menuItemLink={"/gym/" + gymId + "/contact"}

        />

        <NonExpandableItemContainer

            icon={<SettingsIcon />}

            menuItemName="Settings"

            menuItemLink={"/gym/" + gymId + "/settings"}

        />

        </List>

    </div>

    </Drawer>

);

}

codesandbox鏈接:https ://otzsl.csb.app/


查看完整回答
反對(duì) 回復(fù) 2022-12-02
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)