El acordeón de Mantine especifica que su contenido debe ser solo del tipo Accordion.Item (o AccordionItem); consulte la documentación de los elementos secundarios . Esto significa que incluso las funciones que realmente devuelven AccordionItem no aparecerán en la lista.
Por lo tanto, este componente simple mostrará solo AccordionItem(s) que fueron instanciados en línea, sin embargo, ninguno devuelto por otra función (vea MyAccordionItem en esta aplicación simple ).
El código:
import React, { Component } from 'react'; import { render } from 'react-dom'; import { Accordion } from '@mantine/core'; const MyAccordionItem = ({children, label}) => <Accordion.Item label={label}> {children} </Accordion.Item>; function App() { return ( <div style={{width: 200}}> <div>pre</div> <Accordion> <Accordion.Item label="section0"> <div>sec0.item1</div> <div>sec0.item2</div> <div>sec0.item3</div> </Accordion.Item> {/* Section 1 is not displayed because it is no of type Accordion.Item <MyAccordionItem label="section 1"> <div>sec1.item1</div> <div>sec1.item2</div> <div>sec1.item3</div> </MyAccordionItem> <Accordion.Item label="section2"> <div>sec2.item1</div> <div>sec2.item2</div> <div>sec2.item3</div> </Accordion.Item> </Accordion> <div>post</div> </div> ); } render(<App />, document.getElementById('root'));La razón es la función de filtro definida aquí , y utilizada por el acordeón aquí .
Mis preguntas son:
Me encontré con este mismo problema y encontré este problema de GitHub en el repositorio de Mantine con más información sobre la creación de componentes secundarios que devuelven AccordionItems.
rtivital (creador de Mantine) afirma:
Sí, actualmente eso no es compatible, requerirá cambios importantes, por lo que Accordion y otros componentes similares se migrarán al contexto con la próxima versión principal (5.0)
En cuanto a una solución alternativa, no he encontrado nada más que crear un componente personalizado para el contenido dentro del AccordionItem y luego envolverlo con el componente Mantine AccordionItem en línea a través del mapeo o enumerarlos explícitamente.