我想弄清楚如何将Mapped Types
与React 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;
2条答案
按热度按时间jljoyd4f1#
问题不在于react或typescript。问题是你使用了无效的JavaScript语法。
在初始值中,您将属性分配给对象,因此,您应该使用
:
而不是=
。在
setMap
中,您正在设置数组;但是,您类型是一个对象。因此,您必须将语法更改为:要更改
id_scde
属性,您应该使用以下语法:uelo1irk2#
您的
MapType
是object,但您试图将其作为数组调用。您需要使用
setMap((map) => ({ ...map, [id_scde]: scde }));
MapType
也是一个对象,这意味着key只能是string
P.S.最好用
Record<string, string[]>
代替MapType