reactjs 如何在React.useState中使用Map类型?

68de4m5k  于 2023-05-06  发布在  React
关注(0)|答案(2)|浏览(657)

我想弄清楚如何将Mapped TypesReact UseState一起使用

import * as React from 'react';
import logo from './logo.svg';
import './App.css';

function App() {

  type MapType = {
    [id: number]: string[];
  };

  let id_sab: number = 1;
  let sab: string[] = ["a", "b"]

  let scde: string[] = ["c", "d", "e"];
  let id_scde: number = 2

  const [map, setMap] = React.useState<MapType>({
      [id_sab] : sab 
  });

  React.useEffect(() => {

      // How to add a new key-value pair map[id_scde] = scde ?

    setMap(map => [...map, map[id_scde] = scde]) // This gives error. How to do it correctly?
  }, []);

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.tsx</code> and save to reload.
        </p>
      </header>
    </div>
  );
}

export default App;
jljoyd4f

jljoyd4f1#

问题不在于react或typescript。问题是你使用了无效的JavaScript语法。
在初始值中,您将属性分配给对象,因此,您应该使用:而不是=

{
      [id_sab]: sab 
}

setMap中,您正在设置数组;但是,您类型是一个对象。因此,您必须将语法更改为:

setMap((map) => ({...map}));

要更改id_scde属性,您应该使用以下语法:

setMap((map) => ({...map, [id_scde]: scde}));
uelo1irk

uelo1irk2#

您的MapType是object,但您试图将其作为数组调用。
您需要使用setMap((map) => ({ ...map, [id_scde]: scde }));
MapType也是一个对象,这意味着key只能是string
P.S.最好用Record<string, string[]>代替MapType

相关问题