首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ClojureScript:尝试在重帧应用中呈现FlatList时获取“错误:键必须为整数”

在ClojureScript中使用FlatList组件时遇到“错误:键必须为整数”的问题,通常是因为FlatList期望的key属性值必须是整数类型,而在你的代码中提供的key值不符合这个要求。

基础概念

FlatList是React Native中的一个高性能列表组件,用于渲染大量数据。它通过只渲染屏幕上可见的元素来优化性能。key属性用于帮助React识别哪些项目已经更改、添加或删除。

相关优势

  • 性能优化:FlatList只渲染屏幕上可见的部分,而不是整个列表。
  • 滚动性能:支持平滑滚动和快速响应。
  • 数据动态加载:支持通过onEndReached回调函数实现数据的动态加载。

类型

FlatList主要接受以下类型的属性:

  • data:要渲染的数据数组。
  • keyExtractor:用于从数据项中提取key值的函数。
  • renderItem:用于渲染每个数据项的函数。

应用场景

FlatList适用于需要渲染大量数据列表的场景,如新闻列表、商品列表、聊天记录等。

问题原因

错误“键必须为整数”通常是因为keyExtractor函数返回的值不是整数类型。例如,如果返回的是字符串或其他非整数类型,就会触发这个错误。

解决方法

确保keyExtractor函数返回整数类型的key值。以下是一个示例:

代码语言:txt
复制
(ns myapp.core
  (:require [reagent.core :as r]
            [reagent.dom :as rd]))

(defn flat-list-example []
  (let [data (range 100)] ; 示例数据
    [r/FlatList
     :data data
     :keyExtractor #(int %) ; 确保返回整数类型的key值
     :renderItem #(r/view [:text (str "Item " %)])]))

(rd/render [flat-list-example] (.getElementById js/document "root"))

在这个示例中,keyExtractor函数使用int将数据项转换为整数类型。

参考链接

通过确保keyExtractor函数返回整数类型的key值,可以解决“错误:键必须为整数”的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React Native列表之FlatList开发实用教程

在APP开发过程中,列表可谓是页面最重要的一种展现形式了,几乎每一个APP都离不了列表,那么在这篇文章中将向大家分享在React Native中该如何实现列表,以及FlatList的原理和实用指南。...接下来就让我从FlatList的由来说起: 在大家React Native开发环境过程中遇到无法解决的问题可以在课程问答区进行提问,课程老师会对你进行辅导和帮助; FlatList的由来?...另外VirtualizedList还对调度进行了一些改进,这对应用程序的响应很有帮助。 在任何手势或动画或其他交互完成后,呈现在窗口边缘的Item不会被频繁的渲染,并且渲染优先级比较低。...如果你在某些场景碰到内容不渲染的情况(比如使用LayoutAnimation时),尝试设置removeClippedSubviews={false}。我们可能会在将来的版本中修改此属性的默认值。...boolean 在等待加载新数据时将此属性设为true,列表就会显示出一个正在加载的符号。 horizontal?: ?boolean 设置为true则变为水平布局模式。

6.6K00

(cljsrun-at (->JSVM :browser) 语言基础)

由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以在JVM和JSVM间共享,并且cljs也未能完全实现clj中的所有语言特性,更何况由于JSVM是单线程因此根本就不需要clj中STM等特性呢...|:=$&] 末尾字符不能是: 以:为首字符则解释为Keyword 命名空间  cljs中每个symbol无论是函数还是绑定,都隶属于某个具体的命名空间之下,因此在每个.cljs的首行一般为命名空间的声明...自举编译器编译的ClojureScript的Macro代码 引入其他命名空间  要调用其他命名空间的成员,必须要先将其引入 ;;; 命名空间A (ns a.core) (defn say1 []...a & next) ; 非 (not a)  对于or和and的行为是和JS下的||和&&一致, 非条件上下文时,or返回值为入参中首个不为nil或false的参数;而and则是最后一个不为nil或false...不过这之前你会不会发现在clojurescript.net上运行示例代码居然会报错呢?问题真心是在clojurescript.net上,下一篇(cljs/run-at (JSVM.

2.9K70
  • 使用 ClojureScript 开发浏览器插件的过程与收获

    采用这种方式会报如下的错误 根据错误提示,可以看出是 base.js 再去动态引用其他 js 文件时,是以访问网站为相对路径开始的,因此也就找不到正确的 JS 文件了。...在 dev 过程中,推荐设置 cljsbuild 的 optimizations 为 none,以便得到最快的编译速度; 在 release 过程中,可以将其设置为 advanced,来压缩、优化 js...externs 在 optimizations 为 advanced 时,cljs 会充分借用 Google Closure Compiler 来压缩、混淆代码,会把变量名重命名为 a b c 之类的简写...默认会使用 rhino 作为 repl 求值环境,这个在开发浏览器插件时功能很有限,但是对于查看函数定义还是可以的。...总结 ClojureScript 可以算是 Clojure 语言的一个杀手级应用,React 使得后端程序员也能快速作出美观实用的界面。

    79230

    Chrome Extension in CLJS —— 搭建开发环境

    安装 在.vimrc中添加 Plugin 'paredit.vim' 在vim中运行 :source % :PluginInstall 设置键 " 设置键 let mapleader...,必须将优化项设置为:none :source-map true :source-map-timestamp...另外一个十分重要的信息是,在optimizations不为:none的项目下的文件是无法执行fireplace的指令的,所以在开发Content Scrpts时就十分痛苦了~~~  那有什么其他办法呢?...tslime.vim  tslime.vim让我们可以通过快捷键将vim中内容快速地复制到repl中执行 1.安装vim插件 Plugin 'jgdavey/tslime.vim' 在vim中运行 :...中输入lein doo node test-proj 发布前引入externs  辛苦开发后我们将optimizations设置为advanced后编译优化,将作品发布时发现类似于如下的报错 Uncaught

    2.1K60

    HarmonyOS 开发实践 —— 基于RN框架实现高性能瀑布流页面

    组件复用应用中存在大量结构相同的组件频繁创建与销毁的场景而造成性能瓶颈问题的场景。为不同类型的组件创建所对应的组件复用池。...在获取新数据后,服务器返回动态内容的宽高,这样可以根据已知的宽度计算出列表项的高度。通过固定宽高比,可以在 UI 绘制时直接指定组件的宽高属性。...在该事件中,可以获取当前的滚动偏移量(offset)。FlatList 会基于这个偏移量向上和向下各扩展 10 个屏幕的高度,总计 21 个屏幕的内容被定义为按需渲染区域,而其他区域则无需立即渲染。...一旦计算出索引,FlatList 便会开始渲染这些列表项。假设一个屏幕的内容包含 10 个列表项,首次渲染时,索引范围为 0 到 109,FlatList 会渲染 11 个屏幕高度的内容。...在第三方库中,已经有现成的瀑布流组件,其中不少在性能上超越了 FlatList。

    21310

    React从入门到放弃,一个关于网页速度的故事

    当我开始深入研究前端的替代方案时,我发现了 FRP、Flapjax 和 ClojureScript。其中 ClojureScript 让我迷上了 Clojure。...我在我的新工作中尝试了 React,并在 Clojure 主题的峰会(Clojure Cup 2013)期间发现 CLJS 和 React 简直是天作之合。React 为什么这么好呢?...你可以创建一个没有这些问题的 React 应用程序,但是显然,你必须比我们有更好的自控能力(人无完人!)。 而且从那之后,我们的绝大部分用户都转向了移动 app。...当我纠结于对 HTML 片段的请求时,我明白了一件事:当我为目录页选择技术路线图时,最后的选择是“类似 intercooler 的小东西”。 那为什么还不行动呢?...在 Intercooler 中,如果你在 body 中声明ic-target属性,其中的所有标签都会认为它们的 target 也是这个。

    1K20

    Chrome Extension in CLJS —— 搭建开发环境

    安装 在.vimrc中添加 Plugin 'paredit.vim' 在vim中运行 :source % :PluginInstall 设置键 " 设置键 let mapleader...,必须将优化项设置为:none :source-map true :source-map-timestamp...另外一个十分重要的信息是,在optimizations不为:none的项目下的文件是无法执行fireplace的指令的,所以在开发Content Scrpts时就十分痛苦了~~~  那有什么其他办法呢?...tslime.vim  tslime.vim让我们可以通过快捷键将vim中内容快速地复制到repl中执行 1.安装vim插件 Plugin 'jgdavey/tslime.vim' 在vim中运行 :...中输入lein doo node test-proj 发布前引入externs  辛苦开发后我们将optimizations设置为advanced后编译优化,将作品发布时发现类似于如下的报错 Uncaught

    1.7K20

    涨姿势!看骨灰级程序员如何玩转Python

    但如果你要读取很大的数据,尝试添加这个参数:nrows = 5,以便在实际加载整个表之前仅读取表的一小部分。然后你可以通过选择错误的分隔符来避免错误(它不一定总是以逗号分隔)。...此参数还有另一个优点,如果你有一个同时包含字符串和数字的列,那么将其类型声明为字符串是一个好选择,这样就可以在尝试使用此列作为键去合并表时不会出错。...例如,如果要将列'c'舍入为整数,请执行round(df ['c'],0)而非使用apply函数: 1....选择具有特定ID的行 在SQL中,我们可以使用SELECT * FROM ... WHERE ID('A001','C022',...)来获取具有特定ID的记录。...另一个技巧是处理混合在一起的整数和缺失值。如果列同时包含缺失值和整数,则数据类型仍将是float而不是int。导出表时,可以添加float_format ='%。0f'将所有浮点数舍入为整数。

    2.3K20

    Sentry 开发者贡献指南 - SDK 开发(事件负载)

    { "server_name": "foo.example.com" } release 应用程序的发布版本。 发布版本在您组织中的所有项目中必须是唯一的....表示测量完成时的时间戳。格式要么是 RFC 3339 中定义的字符串, 要么是表示自 Unix 纪元以来经过的秒数的数字(整数或浮点数)值。...表示测量完成时的时间戳。格式要么是 RFC 3339 中定义的字符串, 要么是表示自 Unix 纪元以来经过的秒数的数字(整数或浮点数)值。...运行时获取的未处理的描述字符串。对于一些众所周知的运行时,如果没有明确给出,Sentry 将尝试从这个字符串解析 name 和 version。...例如,这在 Django 框架中是必需的,其中模板未集成到 Python 堆栈跟踪中。 渲染的模板。这通常用作堆栈跟踪中的单个帧,并且仅在模板系统不提供适当的堆栈跟踪时才应使用。

    1.8K20

    10招!看骨灰级Pythoner如何玩转Python

    但如果你要读取很大的数据,尝试添加这个参数:nrows = 5,以便在实际加载整个表之前仅读取表的一小部分。然后你可以通过选择错误的分隔符来避免错误(它不一定总是以逗号分隔)。...(或者,你可以在linux中使用 head 命令来检查任何文本文件中的前5行,例如:head -c 5 data.txt) 然后,你可以使用df.columns.tolist()来提取列表中的所有列,然后添加...此参数还有另一个优点,如果你有一个同时包含字符串和数字的列,那么将其类型声明为字符串是一个好选择,这样就可以在尝试使用此列作为键去合并表时不会出错。...选择具有特定ID的行 在SQL中,我们可以使用SELECT * FROM ... WHERE ID( A001 , C022 ,...)来获取具有特定ID的记录。...另一个技巧是处理混合在一起的整数和缺失值。如果列同时包含缺失值和整数,则数据类型仍将是float而不是int。导出表时,可以添加float_format = %。0f 将所有浮点数舍入为整数。

    2.4K30

    OpenGL ES编程指南(四)

    除了创建帧缓冲区对象中描述的过程外,您还可以设置多个渲染目标。 您可以创建多个,而不是为帧缓冲区创建单个颜色附件。...渲染循环处理您打算渲染到OpenGL ES上下文的所有项目,然后将结果呈现给显示器。在动画场景中,每帧都会更新一些数据。...如果复制的数据稍后也用作渲染当前帧的过程的一部分,如中间渲染循环所示,则应用程序会阻止,直到完成所有以前提交的绘图命令。 在应用程序提交框架中需要的所有绘图命令后,它会将结果呈现给屏幕。...例如,静态数据可能被放置在图形处理器可以轻易获取的内存中,甚至放入专用图形内存中。 使用双缓冲来避免资源冲突 当您的应用程序和OpenGL ES同时访问OpenGL ES对象时,会发生资源冲突。...当应用程序尝试更改纹理时,它必须等到之前提交的绘图命令完成CPU才会与GPU同步。 为了解决这个问题,您的应用程序可以在更改对象和绘图之间执行额外的工作。

    2K20

    重绘与回流_html回流重绘

    也就是我们各种各样的Dom标签 在渲染DOM的时候,浏览器所做的工作实际上是: 1. 获取DOM后分割为多个图层 2....浏览器会根据元素的新属性重新绘制, 使元素呈现新的外观。重绘不会带来重新布局,所以并不一定伴随回流。 需要注意的是:重绘是以图层为单位,如果图层中某个元素需要重绘,那么整个图层都需要重绘。...为每个节点生成图形和位置(Layout–重排或回流) 3. 将每个节点填充到图层中(Paint–重绘) 4....(3).opacity配合图层使用,即不触发重绘也不触发回流。 原因: 透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...备注:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestAnimationFrame() 2.window.cancelAnimationFrame(

    1.4K20

    人工智能和Wolfram语言正向着半自动化诊断癌症努力

    不幸的是,71年后,当有人用计算器检验他的计算结果时,发现只有前527位是正确的。就连尚克斯这样有极高工作热情的人,在重复工作中尚且会出错,更不必说其他人了。...因此,我们正在尝试用不同的呈现方式向护士们提供计算机计算的结果,并且允许护士在必要的情况下对结果进行更正。这意味着可以按照不同的播放顺序来呈现结果帧,比如按照时序排序或分类顺序。...如果有几帧是由于过分谨慎而被错误地凸显为息肉,也可以手动修改结果,这样的工作量也不会很大。...帧边框代表AI的分选(从绿色到红色),帧和图像之间的颜色表明人的判断(如果未评级即为白色) 未来的工作 在像息肉检测这样复杂的任务中,计算机不能像Π的数据那样提供完全权威的计算,它更像是另一个专家的第二意见...我们能做的最好的事情就是探寻神经网络的内部结构、试着去了解它如何发挥作用,因此,认真考虑如何使“沉默专家”被应用到人们的决策过程中并最终影响人们生活是十分重要的。

    49210

    开发者选项详解

    生成错误报告:获取当前设备日志文件的副本以与某人共享。当您获得错误报告已准备就绪的通知时,点按此通知即可共享。...依次点按「HWUI 呈现模式分析」(旧称为 GPU 渲染模式分析)和「在屏幕上显示为竖条」,屏幕下方就呈现出满满的竖条和红黄绿三条水平线(旧版本则只有一条水平绿线)。...屏幕上每呈现一帧,这个竖条便会不断地刷新 —— 竖条越低则代表越流畅。...Wi-Fi 扫描调节:为网络分析开路 在 Android 中,第三方应用可以调用 Wi-Fi 扫描功能来获取当然设备能够连接到的 Wi-Fi 列表,但如果对扫描频率不加限制,手机续航可能就会受到影响。...比如,你在QQ和朋友聊天,直接从聊天页面按home键返回到桌面,这时后台就会清理QQ的进程,当你再点击QQ图标时,进去看到的不再是退出时的和朋友聊天的页面。

    8.3K10

    Android卡顿分析

    完成与应用的交互后,点击 Stop。 您应该会在 Display 下方看到 Janky frames 轨道。默认情况下,性能分析器只会将卡顿帧显示为有待调查的候选对象。...在每个卡顿帧中,红色部分突出显示了相应帧超出其渲染截止时间的时长。 image.png 发现卡顿帧后,点击该帧;可根据需要按 M 键调整缩放程度以聚焦到所选帧。...Frames on display:此轨迹显示相应帧在屏幕上的时长。 Frame Lifecycle 部分说明了帧缓冲区在呈现流水线的不同阶段之间的切换方式。...BufferQueue 可帮助您了解图像缓冲区在 Android 图形组件之间切换时的状态。例如,值 2 表示应用当前处于三重缓冲状态,这会导致额外的输入延迟。...如果您发现某个轨迹事件特别长,可以进一步放大,以便找出可能导致呈现速度缓慢的原因。上图显示了界面线程中的 inflate,这意味着应用正在花时间膨胀布局。

    2.6K20

    干货 | 从47%到80%,携程酒店APP流畅度提升实践

    2.3 渲染卡顿和帧率 Google对卡顿定义:界面呈现是指从应用生成帧并将其显示在屏幕上的动作。要确保用户能够流畅地与应用互动,应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度。...如果应用存在界面呈现缓慢的问题,系统会不得不跳过一些帧,这会导致用户感觉应用不流畅,我们将这种情况称为卡顿。...GoogleVitals把卡顿分为了两类: 第一类是呈现速度缓慢:在呈现速度缓慢的帧数较多的页面,当超过 50% 的帧呈现时间超过 16ms 毫秒时,用户感官明显卡顿。...在页面启动加载速度优化上,一般都会采用数据预获取方案,原理是在上一个页面提前获取服务数据,在用户跳转到当前页面时,直接从缓存获取,节省了数据的网络传输时间,达到快速展示当前页面内容的效果。...以酒店订单填写页为例,此页面采用了CRN的架构,在已有各类容器层面和框架层面的优化之后,我们重点对页面内重绘做了治理,并将重绘治理做到了极致,主要涉及到上图中的“5. 首屏首次渲染”和“7.

    1.6K30

    干货 | 从47%到80%,携程酒店APP流畅度提升实践

    2.3 渲染卡顿和帧率 Google对卡顿定义:界面呈现是指从应用生成帧并将其显示在屏幕上的动作。要确保用户能够流畅地与应用互动,应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度。...如果应用存在界面呈现缓慢的问题,系统会不得不跳过一些帧,这会导致用户感觉应用不流畅,我们将这种情况称为卡顿。...GoogleVitals把卡顿分为了两类: 第一类是呈现速度缓慢:在呈现速度缓慢的帧数较多的页面,当超过 50% 的帧呈现时间超过 16ms 毫秒时,用户感官明显卡顿。...在页面启动加载速度优化上,一般都会采用数据预获取方案,原理是在上一个页面提前获取服务数据,在用户跳转到当前页面时,直接从缓存获取,节省了数据的网络传输时间,达到快速展示当前页面内容的效果。...以酒店订单填写页为例,此页面采用了CRN的架构,在已有各类容器层面和框架层面的优化之后,我们重点对页面内重绘做了治理,并将重绘治理做到了极致,主要涉及到上图中的“5. 首屏首次渲染”和“7.

    2K30

    优化可变刷新率屏幕的 App 体验

    ,只要都支持Adaptive-Sync,那就支持动态帧率技术,不受制于AMD显卡必须买AMD认证支持的Free-Sync显示器等问题;免费开放技术将利于市场广泛推广应用可变帧速率显示生态;苹果已经明确在...在可变帧率的显示器中,您可以设置帧在绘制完成后立刻呈现至屏幕,而无需在固定时间节点提交呈现帧;因此如果当前帧的绘制用时为9毫秒,那么在绘制完成时就可以主动提交帧显示,这其中1毫秒的延迟,不会导致易被用户察觉的卡顿...GPU上完成;下图就展示了在一个固定60Hz帧率显示器中,42Hz刷新率时部分帧会无法呈现或被跳过,因此只能降级到30Hz进行帧绘制。...;当然在用户可以自定义帧率的情形中,也可以使用该方法;我们尝试固定帧率为78Hz,并将该间隔值传入afterMinimumDuration中。...1、获取当前硬件帧速率等信息 您可以从UIScreen获取硬件支持最大帧速率,在ProMotion显示器中,这个值永远为120Hz,即使有前述的降低帧率的事件发生,这里仍然为。20Hz。

    2.7K40
    领券