我有一个使用Javascript的React Native应用程序的代码,我正在创建一个对象数组,这些对象是上下文菜单的数据。
当用户从菜单中选择一个项目时,应该调用handleSelectedProject它确实这样做并传递选定的项目对象,但项目变量未定义。
知道获取选中的项目对象应该使用什么语法吗?
提前感谢。
export default MobileMenu = () => {
const projects = useSelector(getPickerList);
const [menuItems, setMenuItems] = useState([]);
useEffect(() => {
loadMenuItems();
}, [projects]);
const handleNewProject = () => {
console.info("New Project");
};
const handleSelectedProject = (project) => {
console.info("Project...", project);
};
const loadMenuItems = () => {
let items = [];
items.push({
label: "New Project",
onPress: handleNewProject,
seperator: false,
});
items.push({ seperator: true });
for (var i = 0; i < projects.length; i++) {
items.push({
label: projects[i].project_name,
onPress: () => handleSelectedProject(projects[i]),
seperator: false,
});
}
setMenuItems(items);
};
return (
<ScrollView>
<View style={styles.container}>
<ContextMenu items={menuItems} />
</View>
</ScrollView>
);
};
问题是您的for
循环。当循环已经完成时,onPress
回调将引用循环变量,此时i
超出范围,因此projects[i]
将求值为undefined
。
简单的解决方案是使用块作用域变量i
,这样projects[i]
就真正引用了专门为该循环迭代创建的变量。您可以将var i
替换为let i
。