R闪亮:填写提示用户并支持自动填充功能的表单时不需要的反应
Posted
技术标签:
【中文标题】R闪亮:填写提示用户并支持自动填充功能的表单时不需要的反应【英文标题】:R shiny: Unwanted reactivity when filling in a form that hints a user and supports an autofill function 【发布时间】:2021-07-29 11:43:21 【问题描述】:我正在 Shiny 中构建一个小型表单应用程序,它应该处理两个用例:
-
用户从上到下填写表单并提示
进入时有几个选项。
用户点击自动填充表单的按钮,
用户可以在提交前更改字段。
不幸的是,在实现用例 2 的同时,我不知道如何抑制我在用例 1 中需要的反应性。
我认为这是一个常见问题,但我还没有设法找到具有 lsolate()
之类的功能或在 observeEvent()
中使用 event_env
和 handle_env
参数的有效解决方案。
以下代码演示了我在抑制反应性方面遇到的问题的简化:
library(shiny)
ui <- fluidPage(
titlePanel("Try to suppress reactivity"),
verticalLayout(
mainPanel(
textInput('inp1', 'inputbox1', value = 'initial value, change triggers inputbox2'),
textInput('inp2', 'inputbox2', value = 'initial value'),
actionButton('btn1', 'should only trigger change of inputbox1'),
actionButton('reset', 'should reset both boxes to initial state')
)
)
)
server <- function(input, output, session)
observeEvent(input$inp1,
updateTextInput(session, inputId = 'inp2', value = 'triggered')
, ignoreInit = TRUE)
observeEvent(input$btn1, updateTextInput(session, inputId = 'inp1', value = 'triggered using btn1'), ignoreInit = TRUE)
observeEvent(input$reset,
updateTextInput(session, inputId = 'inp1', value = 'initial value')
updateTextInput(session, inputId = 'inp2', value = 'initial value')
, ignoreInit = TRUE)
shinyApp(ui = ui, server = server)
【问题讨论】:
【参考方案1】:也许你可以用这个
observeEvent(input$inp1,
if (!(input$inp1 %in% c("initial value","triggered using btn2")) )
updateTextInput(session, inputId = 'inp2', value = 'triggered')
, ignoreInit = TRUE)
【讨论】:
虽然observeEvent(input$inp1,... , suspended = TRUE)
是另一种选择,但我不确定它是否满足您的需求。
r observeEvent(input$inp1, if (!(input$inp1 %in% c("initial value","initial value, change triggers inputbox2","triggered using btn1"))) updateTextInput(session, inputId = 'inp2', value = 'triggered') , ignoreInit = TRUE)
有效,但它迫使我重复条件中的所有选项。对于这个简单的情况,这不是什么大问题,但是由于提示是从服务器获取的,所以我认为这不是最好的选择。我正在尝试让暂停解决方案发挥作用。看起来很合适,但之后我无法恢复。
suspended= TRUE 选项对我来说也没有按预期工作。以上是关于R闪亮:填写提示用户并支持自动填充功能的表单时不需要的反应的主要内容,如果未能解决你的问题,请参考以下文章