簡體   English   中英

如何使用 React 和 TypeScript 在嵌套數組中推送 object?

[英]How to push an object inside nested array using React and TypeScript?

使用 TypeScript 和 React 創建一個 function 的正確方法是什么,該方法將新的 object 推入數組items

const [state, setState] = useState([
  {
    firstname: "William",
    items: [
      { name: "sword", damage: 100 },
      { name: "shield", damage: 50 },
    ],
  },
  {
    firstname: "Allison",
    items: [
      { name: "bow", damage: 70 },
      { name: "axe", damage: 120 },
    ],
  },
]);

const addNewItem = (newItem: object, CharacterIndex: number) => {

  // Push new item inside character's items.
  setState(newState)
};

return (
  <button onClick={() => addNewItem({ name: "dagger", damage: 50 }, 2)}>
    Add Item
  </button>
);

我已經使用過一次 JavaScript,但是使用 Typescript 我經常會遇到一些錯誤。

您可以按照您認為最合適的方式實施它。

const addNewItem = (newItem: object, CharacterIndex: number) => {

    //I would use this
    setState(state.map((elem: object, index: number) => {
        return index === characterIndex 
            ? { ...elem, items: [ ...elem.items, newItem ] }
            : elem;
    }));
};

你應該輸入你的 state 和你所有的 arrays

 import { useState } from "react"; import "./styles.css"; const INITIAL_STATE = [ { firstname: "William", items: [ { name: "sword", damage: 100 }, { name: "shield", damage: 50 } ] }, { firstname: "Allison", items: [ { name: "bow", damage: 70 }, { name: "axe", damage: 120 } ] } ]; type Item = { name: string; damage: number; }; type StateParams = { firstname: string; items: Item[]; }; export default function App() { const [state, setState] = useState<StateParams[]>(INITIAL_STATE); const addNewItem = (newItem: Item, characterIndex: number) => { const nextState = state.map((st, i) => { if (i === characterIndex) { return { firstname: st.firstname, items: [...st.items, newItem] }; } else { return st; } }); setState(nextState); console.log(state); }; return ( <button onClick={() => addNewItem({ name: "dagger", damage: 50 }, 1)}> Add Item </button> ); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM