Skip to main content

golem-add-module

Add a module to an existing golem Shiny application. Triggers on: - "add a module" - "create a module" - "add a golem module" Do not trigger on: - when the user is not working inside a golem app

Ir a la instalación

Datos de origen

Repositorio
ThinkR-open/golem
Última actividad en el origen
15 de mayo de 2026 a las 10:05
Idioma detectado de SKILL.md
inglés
Estrellas
945
Forks
136

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
golem-add-module
description
Add a module to an existing golem Shiny application. Triggers on: - "add a module" - "create a module" - "add a golem module" Do not trigger on: - when the user is not working inside a golem app
# Add Module You are helping a user add a new module to an existing golem Shiny application. ## Creating a Module Use `golem::add_module("name", with_test = TRUE)` to create a new module with proper structure. ## Module Structure A golem module consists of: - `mod_<name>_ui()` - User interface function - `mod_<name>_server()` - Server logic function ## Important Rules ### UI Functions - Always use `ns <- NS(id)` to namespace UI elements - Check for missing `ns` prefixes when building the UI - Never forget to namespace input/output IDs ### Server Functions - Use `moduleServer()` - NEVER use the deprecated `callModule()` - Use `reactiveValues()` for internal state, NOT `reactive()` or `reactiveVal()` - Use `observeEvent()` - NEVER use `observe()` - Always put reactive values inside a reactive consumer Example pattern: ```r mod_<name>_server <- function(id) { moduleServer(id, function(input, output, session) { local_rv <- reactiveValues() observeEvent( input$btn, { local_rv$value <- compute_things(input$btn) } ) output$plot <- renderPlot({ local_rv$value }) }) } ``` ### Reactive Programming Rules - NEVER pass `reactive()` objects between modules unless explicitly prompted - Avoid `renderUI()` + `uiOutput()` - prefer `update*()` functions - Watch for reactive cycles (A updates B updates A) - break them with explicit conditions - Use a `reactiveValues()` object for sharing data between modules, but only include what's necessary ## Testing - Create tests with `usethis::use_test("mod_<name>")` - Each test should set up its own data inline - Use `withr::local_*()` for temporary state changes ## Next Steps After adding the module: 1. Edit the module files to add your UI and server logic 2. Run `devtools::document()` if you added roxygen comments 3. Add the module to your app UI in `app_ui.R` 4. Call it in `app_server()` with `mod_<name>_server("module_id")` 5. Run tests with `devtools::test()`
Ver en GitHub