react-native - 无效调用挂钩错误,但挂钩似乎有效
问题描述
我正在尝试使用useContext
钩子,但出现错误 - Invalid hook call
。我阅读了 React 网站上的文档,但这里似乎没有任何问题。尝试重新安装应用程序并得到相同的错误,所以我猜这不是缓存错误或任何类似性质的错误。这就是我所拥有的:
const customCard = (item: Item) => {
const { theme } = useContext(ThemeContext);
return(
<View>
.....
</View>
)
}
根据错误,问题const { theme }
在行。我在其他文件中有这个确切的行并且它工作得很好,所以我不明白为什么在这个文件中会发生这种情况。
我在某处读到这可能是node_moduels
导致此错误的重复,因此我再次删除node_modules
,npm install
但仍然无效。
该组件用于从带有平面列表的列表中呈现项目。
<FlatList
showsVerticalScrollIndicator={false}
style={{padding: 8}}
data={items}
renderItem={({item, index}) => customCard(items[index])}
keyExtractor={item => item.id}
/>
解决方案
您必须在customCard
使用 FlatList 组件的组件内部进行定义
您应该将 CustomCard 定义为一个单独的组件,否则它将认为它是一个函数,因为您无法在组件内定义组件。
const CustomCard = (item: Item) => {
const { theme } = useContext(ThemeContext);
return(
<View>
.....
</View>
)
}
const App () => {
const items = [];
return (
<View style={styles.app}>
<FlatList
showsVerticalScrollIndicator={false}
style={{padding: 8}}
data={items}
renderItem={({item}) => <CustomCard item={item}/>}
keyExtractor={item => item.id}
/>
</View>
);
}
如果还有什么我可以澄清的,请告诉我。
推荐阅读
- odoo-11 - 我按照安装 odoo-11 的不同步骤,但在第 13 次出现错误
- reactjs - 与 MapBox GL 反应:如何在 ComponentDidMount() 方法中添加源?
- elixir - 如何根据是否选中复选框来显示/隐藏表单的某些部分
- amazon-web-services - 查看私有 S3 存储桶/文件夹中的文件
- c# - 如何使用参数和返回值创建 FUNC 动作列表
- vuejs2 - How to properly handle non-existent named route?
- xml - 在文件中附加带有内容的 xml 标记
- symfony4 - Display only form item from a CollectionType with error
- php - 如何在 PHP 中传递 CURL url
- javascript - Assign an imported function as a class method?