react-native - 反应本机多选
问题描述
我是 React Native 的新手
我正在尝试创建一个多选视图,用户可以在其中选择和取消选择项目,然后所选项目应传递回上一个容器,当用户返回下一个视图时,应检查所选项目。
我正在尝试实施,但遇到的问题是它没有准确地更新数据。当我再次回到屏幕时,它只显示 1 个选定的项目。
谁能告诉我最好的方法,或者是否有任何教程。
我应该使用 Redux 还是使用本机反应?
任何帮助,将不胜感激!!
谢谢!!
解决方案
我相信您描述的问题是由于以下原因:
在componentDidMount
你updateItemWithSelected
循环调用。此updateItemWithSelected
调用既覆盖了每次调用checked
的所有值的属性,arrayHolder
也没有使用 的updater
函数版本setState
,因此循环的后续调用可能会覆盖早期的调用,因为setState
它是异步和批处理的。如果您不在updateItemWithSelected
其他地方使用,则应简化componentDidMount
为:
componentDidMount() {
const selectedTitles = {};
const { state } = this.props.navigation
const params = state.params || {};
if (params.data.length){
params.data.forEach((element) => {
// create a map of selected titles
selectedTitles[element.title] = true;
})
}
const arrayHolder = this.array.map(item => {
// map over `this.array` and set `checked` if title is in `selectedTitles`
return {...item, checked: !!selectedTitles[item.title]};
});
this.setState({ arrayHolder });
}
并删除updateItemWithSelected
.
推荐阅读
- xcode - 无法初始化可可豆荚
- python-3.x - 将数字限制为特定的小数位
- javascript - 根据另一个排序数组
- javascript - 需要在 Antd Datepicker 中编辑 Moment 以显示月份的全名
- google-app-maker - 离开人员的用户选择器行为是什么?
- python - 如何正确按字母顺序对混合大小写的字符进行排序?
- javascript - 在不同元素的不同事件上触发相同的功能
- sql - Oracle 仅显示已更改的列
- java - 如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?
- python - Django:django 中的 URL 并将其添加到模板中