React Native 如何在 for 循环中传递带有参数的函数
React Native how to pass a function with a parameter inside a for-loop
我有下面的代码用于使用 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
。
我有下面的代码用于使用 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
。