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