react-native - 如何使用函数更改平面列表的数据?
问题描述
我有一个数组,其中包含以 flatlist 表示的字典。每当我触摸一个组件时,我都想执行一个更改某些字典数据的函数。例如:
const data = [
{ duration: null, uri: null, step: 0, index: 0 }
{ duration: null, uri: null, step: 0, index: 1 }
{ duration: null, uri: null, step: 0, index: 2 }
{ duration: null, uri: null, step: 0, index: 3 }
]
const updataData = (duration, uri) => {
duration = 1000;
uri = 'jsdbbsljv_sjk_jka'
}
return (
<View>
<FlatList
data={data}
renderItem={itemData => (
<View>
<TouchableOpacity onPress={() => { updataData(itemData.item.duration, itemData.item.uri); itemData.item.step = itemData.item.step + 1 }} >
</TouchableOpacity>
</View>
)}
/>
</View>
)
这不是我正在使用的代码,但我需要学习的是在平面列表的 renderItem 之外的函数上更改 itemData.item 值。我怎样才能做到这一点?
解决方案
您应该使用状态来执行此操作(或其他状态管理流程;如 redux)使用状态:
const initialData = [
{ duration: null, uri: null, step: 0, index: 0 }
{ duration: null, uri: null, step: 0, index: 1 }
{ duration: null, uri: null, step: 0, index: 2 }
{ duration: null, uri: null, step: 0, index: 3 }
]
const [data, setData] = useState(initialData)
const updataData = (duration, uri) => {
duration = 1000;
uri = 'jsdbbsljv_sjk_jka'
}
const updateItem = (item, index) => {
const updatedUri = "something here"
data[index] = {
...item,
uri: updatedUri
}
setData(data)
}
const renderItem = ({item, index}) => {
return (
<View>
<TouchableOpacity
onPress={() => updateItem(item, index)}
>
</TouchableOpacity>
</View>
)
}
return (
<View>
<FlatList
data={data}
renderItem={renderItem}
/>
</View>
)
推荐阅读
- sql - postgreSQL 1 分钟平均值
- python - 将全局变量分配给函数的局部变量
- r - R中的ifelse语句用法
- reactjs - 编译失败。react-router 3 中未定义“Greeting”
- android - 使用 Angular 和 Android Studio 的混合移动应用程序
- c# - 网页从 Xamarin App 中的 webview 中弹出
- html - 从 PrimeNG 中的 tabView 中删除边框
- javascript - 从网站调用事件 - 使用 VBA 到 Internet Explorer
- c# - 绑定到 ReactiveUserControl.ViewModel 不会设置 ViewModel
- dart - Dart - 我如何将字符串和整数映射在一起?