Ahora tengo que ir manualmente a otro enlace para que se muestren los nuevos elementos de la barra de navegación. ¿Cómo puedo recargar la barra de navegación después de obtener los valores de AJAX?
El problema aquí es que tu código para agregar los nuevos elementos del menú de navegación solo se ejecuta una vez que se resuelve la solicitud AJAX. Por lo tanto, en los pocos milisegundos que tarda en ocurrir eso, se muestra el menú de navegación predeterminado (sin modificar). Por eso lo ves en la vista inicial de la página.
Una vez que navegas a otra página, la solicitud ya se habrá resuelto y tus cambios comenzarán a funcionar.
Para responder a tu pregunta: sí, puedes volver a representar condicionalmente un componente.
Dicho esto, no es realmente la respuesta que buscas. Ni siquiera necesitas la solicitud AJAX. Puedes obtener la lista de categorías directamente desde la aplicación. Esto soluciona tu problema y te ahorra una solicitud HTTP adicional. Prueba algo como esto (basado en tu código).
// buscar categorías
const categoryList = api.container.lookup("site:main").categories;
// agregar un elemento de menú de navegación para cada categoría
categoryList.map(val => {
api.addNavigationBarItem({
name: val.name,
displayName: val.name,
title: val.name,
href: `/c/${val.slug}`,
forceActive: (category, args, router) => {
return router.currentURL === `/c/${val.slug}`;
}
});
});