javascript - 哪个是为 Flatlist 中的项目分配功能的更好方法
问题描述
我想知道哪种方法是为React-NativeonPress
中的项目分配功能的正确方法。FlatList
我的导师为我解释过,也许我错过了 OOP 中“委托/关闭/块”定义的知识,我已经阅读了它,但直到现在我仍然无法自己弄清楚。这是细节:
我有一个名为Menu的屏幕——这个菜单有一个<FlatList>
包含多个<MenuItem>
,每个<MenuItem>
都有一个切换按钮来“将项目添加到购物车”或“删除购物车的项目”(单击添加 - 再次单击以删除)。我分开<MenuItem>
到另一个文件,所以我当前的文件夹树看起来像这样:
__Menu
| |_MenuItem
| |__index.js
|
|__index.js
这是我导师的方法:
他定义了一个名为_onToggleCart
in的函数,Menu/index.js
如下所示:
_onToggleCart = (selected) => {
if(selected == false){
this.props.addItemToCart()
}else{
this.props.removeItemFromCart()
}
}
<FlatList
data={data}
initialNumToRender={6}
extraData={this.state.data}
keyExtractor={(item) => item.id}
renderItem={({ item, index }) => <MenuItem item={item} isFinalItem={index == data.length - 1} navigation={navigation} onPress={this._onToggleCart} />}
/>
Menu/MenuItem/index.js
看起来像这样:
...
const [selected, setSelected] = useState(false)
const { id, imgURL, name, desciption, total } = item
_onChangeCart = () => {
setSelected(!selected)
onPress(selected)
}
...
<TouchableOpacity>
...
<TouchableWithoutFeedback onPress={this._onChangeCart}>
...
</TouchableWithoutFeedback>
...
</TouchableOpacity>
这是我的方法:
在Menu/index.js
我没有为 分配任何功能<MenuItem>
,所以我没有功能_onToggleCart
,也没有onPress
道具。它看起来像这样:
<FlatList
data={data}
initialNumToRender={6}
extraData={this.state.data}
keyExtractor={(item) => item.id}
renderItem={({ item, index }) => <MenuItem item={item} isFinalItem={index == data.length - 1} navigation={navigation} />}
/>
像这样Menu/MenuItem/index.js
检查条件_onChageCart
:
...
const [selected, setSelected] = useState(false)
const { id, imgURL, name, desciption, total } = item
_onChangeCart = () => {
if(selected == false){
this.props.addItemToCart()
}else{
this.props.removeItemFromCart()
}
}
...
<TouchableOpacity>
...
<TouchableWithoutFeedback onPress={this._onChangeCart}>
...
</TouchableWithoutFeedback>
...
</TouchableOpacity>
谁能帮助我他们之间有什么不同,哪个更好?
解决方案
与您的组件和您的导师的主要区别在于他将onPress
道具传递给MenuItem
. 这有什么区别?
好吧,在您的示例中,如果您需要在MenuItem
媒体上添加更多操作,您会怎么做?你不能这样做,但是你的导师做的方式,你可以添加更多的功能(调用一个更多的功能),MenuItem
因为他调用props.onPress
.
你的导师做了一个更灵活的组件,这可能会变得更容易,你的组件更固定。
哪个更好?现在这取决于您和您的项目结构。
推荐阅读
- r - 将 func 应用于 R 数据框中的所有元素(按列)
- c++ - 为什么 ++(*p) 会改变指针值?
- php - VSCode 通过删除该行的其余部分进行搜索和替换
- facebook - 通过个人网站 c# 在 facebook 主墙或时间轴上发帖需要哪些权限?
- git - Git:如何将一个文件从分支 A 的更改应用到同一 repo 的分支 B 中的另一个文件?
- vue.js - Font Awesome 5 图标在 Nuxt 的 Vuetify 中不起作用
- javascript - 未找到导出错误 - 更新到 angular-10 后
- angular - 使用异步管道时的 ExpressionChangedAfterItHasBeenCheckedError
- javascript - 如何在javascript中使用url更新重新加载窗口
- scala - java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Float