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

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

在 React 中插入內(nèi)容后,防止將焦點放在“展開更多”按鈕上

在 React 中插入內(nèi)容后,防止將焦點放在“展開更多”按鈕上

喵喵時光機 2023-05-25 18:01:13
我需要在我的頁面中列出一個很長的名字列表,而首先顯示所有名字是不可取的。所以我嘗試在上面添加一個展開更多按鈕。但是,使用按鈕將使瀏覽器在按下按鈕后將焦點保持在該按鈕上,使按鈕在屏幕上的位置保持不變,同時在該按鈕之前插入名稱。另一方面,使用任何不可聚焦的元素(例如具有 onclick 功能的 div)將執(zhí)行所需的行為但完全失去可訪問性。使&ldquo;按鈕&rdquo;只能點擊但不能聚焦。如何使按鈕像片段 div 塊一樣刷新到列表底部?或者是否有更好的選擇來擴展現(xiàn)有列表?const myArray = [? 'Alex',? 'Bob',? 'Charlie',? 'Dennis',? 'Evan',? 'Floron',? 'Gorgious',? 'Harris',? 'Ivan',? 'Jennis',? 'Kurber',? 'Lowrance',]const ExpandList = (props) => {? const [idx, setIdx] = React.useState(8)? const handleExpand = e => {? ? setIdx(idx + 1)? }? return <div className='demo'>? ? <h1>Name List</h1>? ? {myArray.slice(0,idx).map(? ? ? name => <p key={name}>{name}</p>? ? )}? ? <div>? ? ? <button onClick={handleExpand} children='Button Expand' className='pointer' />? ? ? <div onClick={handleExpand} className='pointer'>Div Expand</div>? ? </div>? </div>}ReactDOM.render(<ExpandList/>, document.getElementById('root')).demo>p {? display: block;? padding: 20px;? color: #666;? background: #3331;}.demo>div>div {? display: flex;? padding: 15px;? margin-left: auto;? color: #666;? background: #3331;}.pointer {? cursor: pointer;}.pointer:hover {? background-color: #6663;}<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script><div id='root' class='demo'>hello</div>
查看完整描述

2 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊

從點擊處理程序中的按鈕移除焦點可能是最優(yōu)雅的方法:e.target.blur()。它適用于任何 HTML 元素,無論它是否可聚焦(與div您的情況一樣)。

const myArray = [

  'Alex',

  'Bob',

  'Charlie',

  'Dennis',

  'Evan',

  'Floron',

  'Gorgious',

  'Harris',

  'Ivan',

  'Jennis',

  'Kurber',

  'Lowrance',

]

const ExpandList = (props) => {

  const [idx, setIdx] = React.useState(8)

  const handleExpand = e => {

    e.target.blur()

    setIdx(idx + 1)

  }

  return <div className='demo'>

    <h1>Name List</h1>

    {myArray.slice(0,idx).map(

      name => <p key={name}>{name}</p>

    )}

    <div>

      <button onClick={handleExpand} children='Button Expand' className='pointer' />

      <div onClick={handleExpand} className='pointer'>Div Expand</div>

    </div>

  </div>

}


ReactDOM.render(<ExpandList/>, document.getElementById('root'))

.demo>p {

  display: block;

  padding: 20px;

  color: #666;

  background: #3331;

}


.demo>div>div {

  display: flex;

  padding: 15px;

  margin-left: auto;

  color: #666;

  background: #3331;

}


.pointer {

  cursor: pointer;

}


.pointer:hover {

  background-color: #6663;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.14.0/umd/react.production.min.js"></script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.14.0/umd/react-dom.production.min.js"></script>

<div id='root' class='demo'>hello</div>


查看完整回答
反對 回復(fù) 2023-05-25
?
慕田峪4524236

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

單擊后暫時卸載按鈕并設(shè)置超時以將其添加回來似乎可以完成工作。由于瀏覽器失去了對原始展開按鈕的關(guān)注,這將在不關(guān)注原始按鈕的情況下保持內(nèi)容刷新:


const ExpandList = (props) => {

  const [idx, setIdx] = React.useState(8)

  const [showBtn, setShowBtn] = React.useState(true)

  const handleExpand = e => {

    setShowBtn(false)

    setIdx(idx + 1)

    setTimeout(() => setShowBtn(true), 10)

  }

  return <div className='demo'>

    <h1>Name List</h1>

    {myArray.slice(0,idx).map(

      name => <p key={name}>{name}</p>

    )}

    {showBtn?

      <div>

        <button onClick={handleExpand} children='Button Expand' className='pointer' />

        <div onClick={handleExpand} className='pointer'>Div Expand</div>

      </div> :

      <div></div>

    }

  </div>

}


但我仍在尋找一種不需要“卸載”應(yīng)該一直存在的東西的方法。


查看完整回答
反對 回復(fù) 2023-05-25
  • 2 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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