Tengo el siguiente código para una aplicación React Native que usa Javascript y estoy creando una matriz de objetos que son datos para un menú contextual.
Cuando el usuario selecciona un proyecto del menú, debe llamar a handleSelectedProject, lo que hace y pasar el objeto del proyecto seleccionado, pero no estoy definido para la variable del proyecto.
Cualquier idea sobre cuál debería ser la sintaxis para obtener el objeto del proyecto seleccionado.
Gracias por adelantado.
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> ); };El problema está en tu bucle for . La devolución de llamada onPress hará referencia a la variable de bucle cuando el bucle ya haya terminado, momento en el que i está fuera de rango, por lo que los projects[i] se evaluarán como undefined .
La solución fácil es usar una variable de ámbito de bloque i , de modo que los projects[i] realmente hagan referencia a la variable que se creó específicamente para la iteración de ese ciclo. Para ello, reemplaza var i con let i .