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

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

React - 創(chuàng)建具有動(dòng)態(tài)數(shù)量輸入的表單

React - 創(chuàng)建具有動(dòng)態(tài)數(shù)量輸入的表單

侃侃爾雅 2023-09-21 16:53:17
我正在嘗試創(chuàng)建一個(gè)表單供用戶提交食譜。我需要將其設(shè)置為用戶可以單擊“+”按鈕來(lái)添加更多成分或添加更多說(shuō)明的位置。每個(gè)輸入旁邊還有一個(gè)“-”按鈕可以將其刪除。我基本上可以正常工作,我可以添加項(xiàng)目。然而,刪除這些項(xiàng)目似乎沒(méi)有任何一致性。我正在使用 Material UI,我不確定這是否相關(guān)。以下是我正在處理的相關(guān)代碼,我將在最后鏈接完整的代碼和框。const [ingredients, setIngredients] = React.useState(  [    {      name: "",      amount: ""    }  ]);這是我在反應(yīng)中渲染數(shù)組的方式        {ingredients.map((ing, idx) => {          return (            <div key={idx}>              <TextField                id={"ing-name-" + idx}                name={"ing-name-" + idx}                variant="outlined"                label="Ingrediant Name"                value={ing.name}                required                onChange={handleIngredientChange}              />              <TextField                id={"ing-amt-" + idx}                name={"ing-amt-" + idx}                variant="outlined"                label="Ingredient Amount"                value={ing.amount}                required                onChange={handleIngredientChange}              />              <Button                id={"ing-remove-" + idx}                variant="contained"                color="secondary"                type="button"                onClick={handleIngredientRemove}              >-</Button>            </div>          )        })}        <Button          variant="contained"          color="primary"          type="button"          onClick={handleIngredientAdd}        >+</Button>最后是處理添加/刪除項(xiàng)目的兩個(gè)函數(shù)  function handleIngredientRemove(event) {    /*    * To remove an element, we just use the array.filter function to genereate a new array without the     * element being deleted    */    console.log(event.target.id);    let idx = parseInt(event.target.id.split("-")[2]);    console.log("Removing ingredient " + idx);    let newIngredients = ingredients.filter((ingredient, index) => idx !== index);    setIngredients(newIngredients);      }完整的codesandbox演示https://codesandbox.io/s/happy-herschel-k0oqf
查看完整描述

3 回答

?
汪汪一只貓

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

Material UI 用多個(gè)標(biāo)簽包裹你的按鈕。所以當(dāng)你點(diǎn)擊一個(gè)按鈕時(shí),里面可能還有其他東西被點(diǎn)擊。

將 id 傳遞給 onClick 函數(shù)將解決您的問(wèn)題,但每次單擊按鈕時(shí)它可能會(huì)創(chuàng)建一個(gè)新函數(shù)。

onClick={()?=>?handleIngredientRemove(idx)}

我建議您使用currentTarget而不是 current。

function handleInstructionRemove(event) {

? ? // Use event.currentTarget instead of event.current

? ? let idx = parseInt(event.currentTarget.id.split("-")[2]);

? ? console.log("Removing instruction " + idx);

? ? let newinstructions = instructions.filter(

? ? ? ? ? (instruction, index) => idx !== index

? ? );

? ? setInstructions(newinstructions);

?}


查看完整回答
反對(duì) 回復(fù) 2023-09-21
?
慕無(wú)忌1623718

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

我建議不要解析元素 id 來(lái)提取索引。你可以直接傳遞:

onClick={() => handleIngredientRemove(idx)}

然后抓住它handleIngredientRemove就像

handleIngredientRemove(idx)

現(xiàn)在刪除得很好!


查看完整回答
反對(duì) 回復(fù) 2023-09-21
?
繁星點(diǎn)點(diǎn)滴滴

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

一種簡(jiǎn)單的方法是將索引傳遞給刪除處理程序并使用該索引進(jìn)行過(guò)濾。(僅針對(duì)第一種形式進(jìn)行了更改) 這里是更新后的代碼

或者您可以在添加時(shí)使用時(shí)間戳作為 id 并使用該唯一時(shí)間戳 id 進(jìn)行刪除


查看完整回答
反對(duì) 回復(fù) 2023-09-21
  • 3 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報(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)