React Native-- FlatList上的高级示例

时间:2017-08-12 23:58:46

标签: react-native react-native-flatlist

我使用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行:一个箭头函数,它以...符号作为参数?为什么呢?

1 个答案:

答案 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”应该是一个字符串