为何React Native FlatList的renderItem需解构item而keyExtractor无需?
为什么FlatList的renderItem需要解构item而keyExtractor不需要?
核心原因是两个回调函数的参数结构完全不一样,这是FlatList组件内部定义的规则:
renderItem的参数是一个对象:FlatList在调用renderItem时,会把当前项的相关数据打包成一个对象传进去,这个对象里包含
item(当前数据项)、index(下标)、separators(分隔器相关方法)等属性。你看到的({ item })是直接解构出对象里的item属性,如果不解构的话,得这么写:renderItem={(params) => <div>{params.item.text}</div>}解构只是为了写法更简洁,本质是从参数对象里提取
item。keyExtractor的参数是直接传入的item和index:FlatList调用keyExtractor时,会直接把当前数据项本身和它的下标作为两个独立参数传进去,不需要包裹在对象里,所以你可以直接用
(item, index)来接收,自然不需要解构。
简单说,就是FlatList给两个回调传参的方式不一样:一个传的是包裹着item的对象,另一个直接传item和index本身,这才导致了写法上的差异,和你会不会解构语法没关系,完全是组件内部的设计逻辑。
内容的提问来源于stack exchange,提问作者Danny Roberts
相关产品推荐
相关产品推荐

