
[英]How can I access a property in an array of objects that is set in the state in react?
[英]How can I map through an array of objects, remove one and set my state as the new array in react-native?
我有一个代表日历的复选框列表。 单击复选框时,相应的日历将作为数组添加到我的状态checkedTaskList
中。
如何映射此checkedTaskList
数组,并在未选中时从中删除日历? 然后,我希望使用删除了未经检查的日历的新数组设置我的状态。
状态
const [checkedTaskList, setCheckedTaskList] = useState([]);
日历复选框
<CheckBox_1 checked={() => setTaskCheked(calendar)} /> //Holidays
<CheckBox_1 checked={() => setTaskCheked(calendar)} /> //Birthdays
<CheckBox_1 checked={() => setTaskCheked(calendar)} /> //Events
setTaskChecked 函数
const setTaskCheked = (calendar) => {
if (checkedTaskList.length > 0) { //CHECK IF ARRAY IS EMPTY
const tempCalendarList = checkedTaskList;
tempCalendarList.map((cal) => {
if (cal === calendar) { //CHECK IF SELECTED CALENDAR IS ALREADY IN checkedTaskList STATE
const index = tempCalendarList.indexOf(cal);
tempCalendarList.slice(index, 1);//REMOVED UNCHECKED CALAENDAR
setCheckedTaskList(tempCalendarList);//SET STATE WITH NEW ARRAY WITH REMOVED CALENDAR
}
});
} else {
setCheckedTaskList([...checkedTaskList, calendar]);
}
};
您可以使用Array.prototype.filter()
来获取所有其他元素。
const setTaskCheked = (calendar) => {
if (checkedTaskList.length > 0) {
setCheckedTaskList(checkedTaskList.filter(cal => cal != calendar)
} else {
setCheckedTaskList([...checkedTaskList, calendar]);
}
};
就像 Balastrong 说的那样,首先使用过滤器删除未选中的元素,您确认该元素有效。
我假设你接下来要做的是在设置数组后立即检查它,有点像
setCheckedTaskList([...checkedTaskList, calendar]);
alert(checkedTaskList.length);
这将显示checkedTaskList 以前的内容,因为设置它的调用是异步的。
为了更准确地查看更改,您需要使用 useEffect() 并挂钩到 checkedTaskList,例如
useEffect(() => {
if (checkedTaskList.length > 0)
alert(checkedTaskList.length);
}, [checkedTaskList]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.