亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在材質 UI 選擇菜單中使用子標題

如何在材質 UI 選擇菜單中使用子標題

飲歌長嘯 2022-09-02 16:12:04
我正在努力了解如何在使用粘性子標題的Select控件上正確設置一長串菜單項。問題是,當項目滾動時,它們會遮蓋副標題。我查看了分組選擇項的材質 UI 示例作為開始。我想要看起來像帶有固定子標題列表的材質 UI 示例的行為。這是我正在嘗試的代碼沙盒。下面是我的代碼片段:<Select        className={classes.root}        MenuProps={{ className: classes.menu }}        value="Pick one"        onChange={e => {}}      >        {subHeaders.map(header => (          <li key={header}>            <ul>              <ListSubheader>{header}</ListSubheader>              {items.map(item => (                <MenuItem key={item} value={item}>                  {item}                </MenuItem>              ))}            </ul>          </li>        ))}      </Select>以下是問題的快照:
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

使用Select組件,我們甚至可以通過一些更正來重現行為。但它對你不起作用“選擇”組件不需要嵌套在子元素中的項。這樣,我們將永遠無法識別所選的元素。

或者,我們有自動完成組件。它可以更好地滿足您的需求。

http://img1.sycdn.imooc.com//6311bafb0001eef106540328.jpg

關于您提供的示例,我們可以執行一些操作,但同樣,我們將無法維護所選項目的狀態。要實現與列表相同的行為,我們需要將相同的行為應用于 Menu 將呈現的列表。Select 將呈現一個繼承 List 的 Menu,因此我們可以通過 prop MenuListProps 屬性應用與列表示例相同的行為。

我已將修復程序應用于您的示例


查看完整回答
反對 回復 2022-09-02
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

我設法用粘性菜單項制作了一個Material-ui選擇的工作解決方案。


使用 MaterialUI MenuItem 而不是所有<li> <ul> <ListSubheader>


    const [isOpen, setIsOpen] = useState(false);

    const [value, setValue] = useState();

    

    const onToggle = () => {

        setIsOpen((prev) => !prev);

      };

    

    const onClose = () => {

        setIsOpen(false);

      };

    

    const _onChange = (event: React.ChangeEvent<{ value: unknown }>) => {

        const valueToSelect = event.target.value as Value;

        if (

          isResetSeletced(valueToSelect) ||

          (multiple

            ? !valueToSelect.length ||

              valueToSelect.length < minSelections ||

              (valueToSelect as string[]).some((option) => !option)

            : !valueToSelect?.length && minSelections > 0)

        ) {

          return;

        }

        event.persist();

        onChange(valueToSelect);

      };

    

      const renderValue = (selected: any) => {

        if (!selected.length) {

          return '';

        }

        if (multiple) {

          const isReachedLimit = selected.length > MAX_SELECTIONS;

          const hiddenTags = isReachedLimit ? (

            <span>+{value.length - MAX_SELECTIONS}</span>

          ) : null;

          const selectionsToShow = isReachedLimit

            ? selected.slice(0, MAX_SELECTIONS)

            : selected;

          return (

            <StyledTagsContainer>

              <Tags values={selectionsToShow} onRemoveTag={onRemoveTag} />

              {hiddenTags}

            </StyledTagsContainer>

          );

        }

        return selected;

      };



  const resetMenuItem = secondaryOptions?.map((resetItem, index) => {

    return (

      <MenuItem

        key={resetItem.value + index}

        onClick={() => {

          resetItem.onClick();

        }}

        isLast={!index}

        isSelected={

          resetItem.value === resetSelected?.value ||

          resetItem.value === value ||

          (multiple && resetItem.value === value[0])

        }

        value={resetItem.value}

        icon={<RadioIcon />}

      >

        {resetItem.text}

      </MenuItem>

    );

  });

    

    

    <Select

        displayEmpty

        onClose={onClose}

        value={value}

        onChange={_onChange}

        renderValue={renderValue}

        open={isOpen}

      >

        {menuItems}


        <div style={{ position: 'sticky', bottom: 0 }}>

          {resetMenuItem}

        </div>


    </Select>



查看完整回答
反對 回復 2022-09-02
  • 2 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號