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

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

嘗試在 ReactJS 中拼接我的數(shù)組中的項(xiàng)目

嘗試在 ReactJS 中拼接我的數(shù)組中的項(xiàng)目

我正在嘗試在 DoubleClick 事件上拼接我的列表(庫(kù)存)中的一個(gè)項(xiàng)目,但有些東西無(wú)法正常工作。如果有人能如此友善并幫助我弄清楚我在這里做錯(cuò)了什么,那就太好了。對(duì)于信息:當(dāng)我嘗試切片一個(gè)項(xiàng)目時(shí),它會(huì)被切片,但每次第一個(gè)項(xiàng)目和第二個(gè)項(xiàng)目都會(huì)丟失里面的所有內(nèi)容:    function Inventory() {    const [datas, setData] = useState([      {        id: 1,         label: "Sword",        itemname: "grey_sword",        pieces: 1,        type: "weapon",      },      {        id: 2,         label: "Knife",        itemname: "grey_knife",        pieces: 1,        type: "weapon",      },    ]);    useEffect(() => {      const getItems = (data) => {        setData(data);      } // this section is for something else    }, [datas]);    const deleteItem = (index) => {      const test = ([], datas)      test.splice(index, 1)      setData([{test : datas}]);    }    const renderItem= (data, index) => {      return (        <Item          key={data.id}          id={data.id}          type={data.type}          label={data.label}          index={index}          name={data.itemname}          pieces={data.pieces}          deleteItem={deleteItem}        />      )    }    return (        <div className="inventory-holder">            <div className="inventory-main">              <div className="inventory-information">                <div className="inventory-title">                  Inventory                </div>                <div className="inventory-weight-info">                  0.20 kg / 1.00 kg                </div>                <div className="inventory-buttons">                  <button className="refresh-button" tabIndex="-1"><FontAwesomeIcon icon={faRedo} /></button>                  <button className="close-button" tabIndex="-1"><FontAwesomeIcon icon={faTimes} /></button>                </div>              </div>              <div className="items-holder">                <div>{datas.map((data, i) => renderItem(data, i))}</div>              </div>          </div>        </div>    )}export default Inventory;
查看完整描述

2 回答

?
揚(yáng)帆大魚(yú)

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

問(wèn)題

Array::splice進(jìn)行就地突變。

該方法通過(guò)移除或替換現(xiàn)有元素和/或就地splice()添加新元素來(lái)更改數(shù)組的內(nèi)容。

這里的主要問(wèn)題是狀態(tài)突變。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

const test = ([], datas)最終將狀態(tài)引用保存datatest,然后由 進(jìn)行變異test.splice(index, 1),然后奇怪的是被覆蓋回不同的狀態(tài)setData([{ test: datas }]);。

解決方案

一種常見(jiàn)的模式是改用array::filter并在索引上進(jìn)行過(guò)濾。filter返回一個(gè)新數(shù)組。

const deleteItem = (index) => { 
 setData(datas => datas.filter((_, i) => i !== index);
}


查看完整回答
反對(duì) 回復(fù) 2023-02-24
?
湖上湖

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

您的項(xiàng)目太復(fù)雜了:


您可以直接使用道具,而無(wú)需通過(guò)您的div.


const Item = ({ index, id, type, label, name, pieces, deleteItem }) => {

  

    const useItem = () => {

      console.log(type + " " + index + " " + pieces )

      if(pieces <= 1){

        deleteItem(index);

      }

    }


    return(

        <div data-index={id} onDoubleClick={useItem} className="inventory-item">

            <img className="item-pic" src={chosedtype} ></img>

            <div className="item-label">{label}</div>

            <div className="item-number-pieces">{pieces}</div>

        </div>

    );

};


export default Item;

然后你的deleteItem功能不會(huì)做你想要的:


const deleteItem = (index) => {

  const test = ([], datas); //test = datas;

  test.splice(index, 1); // test = test without the item at the index

  setData([{test : datas}]);//data = [{test: datas}] so an array with an object with the property test = datas (the original array).

}

您應(yīng)該將您的更改deleteItem為:


const deleteItem = (index) => {

    const newArray = datas.filter((item, i) => i !== index);

    setData(newArray);

}


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

添加回答

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