在R Shiny中使用自身更新React性“值”

jchrr9hc  于 2023-02-26  发布在  React
关注(0)|答案(1)|浏览(233)

我正在尝试建立一个 Jmeter 板来跟踪bugzilla中的组错误。检索此数据的查询很慢,所以我只想检索更改的错误并更新本地副本。
我有一个函数'get_bugzilla',它返回所有内容,或者如果提供了一个时间戳,则在该时间戳之后所有内容都发生了变化。
我目前最好的尝试是以一种被动的方式使用它:

poll<-reactiveTimer(intervalMs = 10000)
ckbdata<-reactive({get_bugzilla()})
ckbdata<-reactive({
    poll()
    wip<-ckbdata()
    new<-get_bugzilla(max(wip[['last_change_time']]))
    if(length(new)>0){
        wip<-wip[!(id %in% new[['id']]),]
        wip<-rbind(wip,new)
    }
    wip
})

这将产生错误“求值嵌套太深:无限递归/选项(表达式=)?",这是我担心的事情。但是我找不出正确的方法来做这件事。

bkhjykvo

bkhjykvo1#

这是因为存在无限循环,即一个React表达式调用另一个,反之亦然。ckbdata被定义为React表达式两次,这可能导致无限递归。
也许这个有用

poll <- reactiveTimer(intervalMs = 10000)

ckbdata <- reactive()
  poll()
  current_data <- isolate(ckbdata())
  # retrieve all the data, if the current data is empty
  if (is.null(current_data)) {
    get_bugzilla()
  } else {
    get_bugzilla(max(current_data[['last_change_time']]))
  }
})
ckbdata_updated <- reactive({
  current_data <- ckbdata()
  # Update the local copy in case of modification or bug
  new_data <- get_bugzilla(max(current_data[['last_change_time']]))
  if (length(new_data) > 0) {
    current_data <- current_data[!(current_data$id %in% new_data[['id']]),]
    current_data <- rbind(current_data, new_data)
  }
  current_data
})

干杯

相关问题