Autoclose=’outside’ no funciona con varios menús en react-bootstrap.
Tengo un menú desplegable con 2 posibles menús que pueden alcanzarse haciendo clic en algunos elementos del menú desplegable. Al agregar “autoClose=’outside'”, solucioné el problema de cierre intempestivo al hacer clic en cualquier lugar del menú principal desplegable. Pero como tengo otro menú, una vez que se muestra, la primera vez que lo abro, el “autoClose” realmente no funciona, en cambio, es como si nunca se hubiera establecido, cierra todo el menú desplegable, y cuando lo vuelvo a abrir, ingreso al menú secundario por la segunda vez, este ‘error’ no se produce nuevamente en este menú, pero ocurre cuando vuelvo al primero, etc.
Sospecho que es porque “autoClose” solo funciona en el menú seleccionado actualmente, en el ejemplo a continuación funciona con el menú “principal” y no en el menú “secundario” primero, como se describió anteriormente, cuando vuelvo a abrir el menú desplegable muestra directamente el menú “secundario”, funciona y una vez que vuelvo al menú “principal”, no lo hace.
Básicamente, este es el código que estoy ejecutando.
import {Dropdown} from 'react-bootstrap';
import {useState} from 'react';
const Mydropdown = (props) => {
const [menu, setMenu] = useState('main');
return(
<>
<dropdown autoclose='outside'>
{
menu==="main"
&&
(
<>
<dropdown.menu>
<dropdown.item onclick="{()" ==""> setMenu("secondary")}>
Menú secundario
</dropdown.item>
</dropdown.menu>
)
}
{
menu==="secondary"
&&
(
<>
<dropdown.menu>
<dropdown.item onclick="{()" ==""> setMenu("main")}>
Menú principal
</dropdown.item>
</dropdown.menu>
)
}
</dropdown>
);
}
davy.ai
Solución para el problema de autoClose en React Bootstrap
Según el fragmento de código, parece que el problema ocurre porque
autoClose='outside'
solo está funcionando para el menú seleccionado actualmente.Una posible solución es utilizar la propiedad
show
deDropdown
y manejar el comportamiento deautoClose
manualmente.Aquí tienes un fragmento de código actualizado con algunos cambios:
Aquí, he agregado un nuevo estado
show
para controlar la visibilidad del dropdown. En lugar de depender del comportamiento deautoClose
, estoy manejando el eventoonClose
del componenteDropdown
. Cada vez que se cierra el dropdown, establezco el estadoshow
en falso.Para que esto funcione, he envuelto el componente
Dropdown
dentro de un div envolvente que alterna el estadoshow
.Además, he utilizado un componente
Dropdown.Toggle
para mostrar el nombre del menú actual en el botón del dropdown.Con estos cambios, el problema de autoClose debería resolverse y el dropdown debería funcionar como se espera.