感谢大家的意见。我现在意识到我本可以提出一个更好、可重现的例子来帮助你们更好地了解我的问题,对此我深表歉意——我会在以后的帖子中记住这一点(向@MrFlick 大声疾呼一篇关于制作的帖子!)
我最终考虑了@r2evans 的评论,并能够根据它提出一个解决方案!我对 Stackoverflow 还很陌生,所以不确定是否可以将评论标记为答案,但非常感谢@r2evans!
以下是我在服务器功能中使用的解决方案,以帮助我获得所需的功能:
curr_date <- shiny::reactiveValues(start=format(Sys.Date(),"%Y-%m-%d"), end=format(Sys.Date(), "%Y-%m-%d"))
shiny::observeEvent(input$reports_date_range, {
dates <- input$reports_date_range
# if start date changed
if (dates[1] != curr_date$start) {
# if start date is after end date, have end date follow and update curr_date
if(dates[1] > curr_date$end) {
updateDateRangeInput(session, "reports_date_range", start = dates[1], end = dates[1])
curr_date$start <- dates[1]
curr_date$end <- dates[1]
} else { # if start date is equal to or before end date, update curr_date$start
curr_date$start <- dates[1]
}
} else if (dates[2] != curr_date$end) { # if end date changed
# if end date is before start date, have start date follow end date
if(dates[2] < curr_date$start) {
updateDateRangeInput(session, "reports_date_range", start = dates[2], end = dates[2])
curr_date$start <- dates[2]
curr_date$end <- dates[2]
} else { # if end date is equal to or after the start date, update curr_date$end
curr_date$end <- dates[2]
}
}
})
基本上,反应值curr_date
保持输入在开始时默认的当前日期,并更新为每次更改输入时的值。
在服务器逻辑中,我检查用户输入的日期与我输入的历史值是否不匹配,以确定用户curr_date
更改了两个日期(开始或结束)中的哪一个。然后,根据用户的操作应用正确的代码就很简单了!
再次感谢大家,让我知道你们是否可以发现任何改进此解决方案的方法,如果有任何发现我会更新!