我使用react创建了一个游戏,现在我正在尝试对我的代码+样式进行必要的更改,以便游戏通过ReactNative在移动设备上运行。以下代码来自有关FlatList的官方指南。
1. class MyList extends React.PureComponent {
2. state = {selected: (new Map(): Map<string, boolean>)};
3. _keyExtractor = (item, index) => item.id;
4. _onPressItem = (id: string) => {
// updater functions are preferred for transactional updates
5. this.setState((state) => {
// copy the map rather than modifying state.
6. const selected = new Map(state.selected);
7. selected.set(id, !selected.get(id)); // toggle
8. return {selected}; }); };
虽然我之前使用过es6箭头函数和地图,但老实说我很难理解在以下两种情况下使用的语法:
a)第2行:(new Map(): Map<string, boolean>)
假设要返回什么?
b)第4行:一个箭头函数,它以...符号作为参数?为什么呢?
答案 0 :(得分:3)
第2行,只是用Map类型初始化状态(参见这里的Map:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
new Map()是如何创建Map的,后面的部分是“Flow”类型规范。这是Facebook自己的Javascript静态类型检查器库(参见这里:https://flow.org/en/docs/types/arrays/)
地图类似于JS中的对象,但它们有差异,例如,键可以是任何东西,它们是可迭代的,它们可以更大等等。
第4行:正如您在Flow中所看到的,您可以在参数上指定类型, 所以你基本上期望“id”应该是一个字符串