首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R twitterwidget包-更新闪亮输入时未清除tweet

R twitterwidget包-更新闪亮输入时未清除tweet
EN

Stack Overflow用户
提问于 2021-09-06 05:39:54
回答 1查看 85关注 0票数 1

每次我对renderTwitterwidget()的输入发生变化时,都会在闪亮的UI上的原始tweet下面打印一条新的tweet。是否可以在每次将新的twitterwidget对象传递给renderTwitterwidget时清除旧的tweet并打印新的tweet

问题的示例:https://media.giphy.com/media/BQUewH12DzhxX2bjMP/giphy.gif?cid=790b7611692336f45990123a77213a1975b8338b7e69b6e1&rid=giphy.gif&ct=g

代码没有使用RStudio查看器正确地呈现内容,所以请使用浏览器中的应用程序来检查结果。

这是这个闪亮的应用程序的代码:

代码语言:javascript
复制
# Libraries ---------------------------------------------------------------

library(shiny)
library(twitterwidget)
library(tidyverse)
library(rtweet)

# UI ----------------------------------------------------------------------

ui <- fluidPage(
  # Input functions
  textInput(inputId = 'search_term',
            label = 'Search tweets from the last 6-9 days:',
            #value = 'covid',
            placeholder = '#covid-19',
            width = '90%'
  ),
  actionButton(inputId = 'submit_button',
               label = 'Submit'
  ),
  
  # Output functions 
  twitterwidgetOutput('twitter', width = "100%", height = "400px")
)

# Server ------------------------------------------------------------------

server <- function(input, output) {
  
  # Get data 
  tweet_id <- eventReactive(input$submit_button, {search_tweets(q = input$search_term, n = 1, lang = 'en') %>% pull(status_id)})
 
  # Twitter widget
  output$twitter <- renderTwitterwidget(twitterwidget(tweet_id()))
  
}

shinyApp(ui, server)

没有twitter帐户的人的代码:

代码语言:javascript
复制
# Libraries ---------------------------------------------------------------

library(shiny)
library(twitterwidget)
library(tidyverse)


# Vector of tweet status_id's ---------------------------------------------

v_ids <- c("1434550715905724416", "1434404394133594112", "1434270392533889039", "1432293982541946884", "1432396306698354688",
           "1434187565633003526", "1433095963338551297", "1432339458309955585", "1431909314600574977","1432064144040202241",
           "1434268168231477248", "1431912031100227589", "1434188285103022086", "1432066801588920325", "1434184994579230720",
           "1434100772069908485", "1433887544274563075", "1433801716202344460", "1433799487592468492", "1433754869429592078",
           "1433120347176386561", "1432410673259057161", "1433115345938784263", "1433093342456389639", "1432961860731478017",
           "1432828362280476673", "1432812324709179394", "1432806681793159168", "1432721292403281920", "1432707208211537930",
           "1432700115299586053", "1432658875665289216", "1432623112747638785", "1432614035141312513", "1432612768717451266")

# UI ----------------------------------------------------------------------

ui <- fluidPage(
  # Input functions
  textInput(inputId = 'search_term',
            label = 'Search tweets from the last 6-9 days:',
            #value = 'covid',
            placeholder = '#covid-19',
            width = '90%'
  ),
  actionButton(inputId = 'submit_button',
               label = 'Submit'
  ),
  
  # Output functions 
  twitterwidgetOutput('twitter', width = "100%", height = "400px")
)

# Server ------------------------------------------------------------------

server <- function(input, output) {
  
  # Get data 
  tweet_id <- eventReactive(input$submit_button, {sample(v_ids, 1)})
 
  # Twitter widget
  output$twitter <- renderTwitterwidget(twitterwidget(tweet_id()))
  
}

shinyApp(ui, server)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 06:43:49

奇怪的功能,不确定是包的问题还是什么。您也可以使用shinyjs并编写用户定义的javascript函数来清除div的内容。

下面是一个应该起作用的简单实现:

代码语言:javascript
复制
# Libraries ---------------------------------------------------------------

library(shiny)
library(twitterwidget)
library(tidyverse)
library(rtweet)

# UI ----------------------------------------------------------------------

ui <- fluidPage(
  shinyjs::useShinyjs(),
  shinyjs::extendShinyjs(
    text = "shinyjs.refresh = function() {
      var div = document.getElementById('twitter_output');
      while(div.firstChild){
          div.removeChild(div.firstChild);
        }
      }",
    functions = c("refresh")
  ),
  # Input functions
  textInput(
    inputId = 'search_term',
    label = 'Search tweets from the last 6-9 days:',
    #value = 'covid',
    placeholder = '#covid-19',
    width = '90%'
  ),
  actionButton(inputId = 'submit_button',
               label = 'Submit'),
  
  twitterwidgetOutput("twitter_output")
)

# Server ------------------------------------------------------------------

server <- function(input, output) {
  observeEvent(input$submit_button, {
    # Obtain tweet ID
    tweet_id <-
      search_tweets(q = input$search_term,
                    n = 1,
                    lang = 'en') %>%
      pull(status_id)
    
    # Refresh the `twitter_output` div
    shinyjs::js$refresh()
    
    # Render the tweet again.
    output$twitter_output <-
      renderTwitterwidget(twitterwidget(tweet_id))
  })
}

shinyApp(ui, server)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69069585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档