如何解决R Shiny中TinyMCE编辑器无法重复加载的问题?
解决R Shiny中TinyMCE编辑器重复加载的问题
问题核心在于重复使用同一ID渲染编辑器时,TinyMCE的初始化脚本不会再次执行,导致仅显示原生文本框。通过每次加载时生成唯一编辑器ID,让Shiny识别为新UI组件,即可重新触发编辑器初始化逻辑。
修改后的代码如下:
library(shiny) library(ShinyEditor) ui <- fluidPage( use_editor("API-KEY"), uiOutput("tiny"), actionButton("load", "Load TinyMCE"), actionButton("remove", "Remove TinyMCE") ) server <- function(input, output, session) { # 用响应式变量存储当前编辑器的唯一ID current_editor_id <- reactiveVal(NULL) observeEvent(input$load, { # 生成带时间戳的唯一ID,确保每次加载都是新组件 current_editor_id(paste0("textcontent_", as.integer(Sys.time()))) }) observeEvent(input$remove, { # 清空ID,触发UI移除 current_editor_id(NULL) }) output$tiny <- renderUI({ # 仅当ID存在时渲染编辑器 req(current_editor_id()) editor(current_editor_id()) }) } shinyApp(ui = ui, server = server)
关键说明:
- 点击「Load TinyMCE」时生成带时间戳的唯一ID,避免重复ID导致的初始化失效问题。
- 用
reactiveVal跟踪编辑器状态,renderUI根据ID是否存在决定渲染编辑器或清空内容。 - 每次加载新ID的编辑器,Shiny会重新执行初始化逻辑,确保TinyMCE正常渲染。
内容的提问来源于stack exchange,提问作者Graham
相关产品推荐
相关产品推荐

