运行react-native-swipe-list-view代码时遇TypeError错误求助
解决
TypeError: undefined is not an object (evaluating 'VisibleComponent.props') 错误 我一眼就发现你代码里的关键问题了——renderItem 箭头函数没有返回JSX元素!这种小疏忽很容易触发这类报错,咱们来一步步解决:
问题根源
当你在箭头函数中使用大括号 {} 包裹代码块时,必须显式通过 return 语句返回JSX内容。你的当前代码里,renderItem 只是定义了 <SwipeRow> 组件,但没有返回它,导致最终返回 undefined。SwipeListView无法找到预期的组件实例,自然就抛出了 VisibleComponent.props 未定义的错误。
修复方案
有两种简单的修复方式,选哪种都可以:
方式1:隐式返回(去掉大括号,改用小括号)
直接把箭头函数的大括号换成小括号,让JSX自动作为返回值:
<SwipeListView closeOnRowBeginSwipe scrollEnabled={true} initialNumToRender={8} extraData={this.state} refreshControl={ <RefreshControl refreshing={this.state.refreshing} onRefresh={this._onRefresh} /> } useFlatList data={this.state.listViewData} renderItem={(rowData, rowMap) => ( <SwipeRow key={rowData.item.key} leftOpenValue={75} rightOpenValue={-150} closeOnRowPress extraData={this.state} directionalDistanceChangeThreshold={2} > <Hidden data={rowData.item} screen={this.state._screen}/> <FrontFace data={rowData} /> </SwipeRow> )} />
方式2:显式添加 return 语句
如果需要在 renderItem 里写额外逻辑,保留大括号并加上 return:
<SwipeListView closeOnRowBeginSwipe scrollEnabled={true} initialNumToRender={8} extraData={this.state} refreshControl={ <RefreshControl refreshing={this.state.refreshing} onRefresh={this._onRefresh} /> } useFlatList data={this.state.listViewData} renderItem={(rowData, rowMap) => { // 这里可以添加额外的逻辑代码 return ( <SwipeRow key={rowData.item.key} leftOpenValue={75} rightOpenValue={-150} closeOnRowPress extraData={this.state} directionalDistanceChangeThreshold={2} > <Hidden data={rowData.item} screen={this.state._screen}/> <FrontFace data={rowData} /> </SwipeRow> ) }} />
额外检查
修复完返回值问题后,也可以确认下 <Hidden> 和 <FrontFace> 组件是否正确接收并处理了传入的 data、screen 等props,确保它们没有内部的props处理错误。不过绝大多数情况下,这个报错都是由 renderItem 未返回组件导致的。
内容的提问来源于stack exchange,提问作者Uzama Zaid
相关产品推荐
相关产品推荐

