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

معلومات المصدر

المستودع
ThinkR-open/golem
آخر نشاط في المصدر
١٥ مايو ٢٠٢٦ في ١٠:٠٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٩٤٦
التفرعات
١٣٧

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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()`
عرض على GitHub