NS() 和 ns() 有什么区别 (Rshiny)

What is the difference between NS() and ns() (Rshiny)

提问人:Leo 提问时间:12/5/2022 最后编辑:Stéphane LaurentLeo 更新时间:12/6/2022 访问量:214

问:

NS() 与 ns() 何时使用大写变体,何时使用小写变体?

r shiny 命名空间 shinymodules

评论

0赞 Community 12/5/2022
请澄清您的具体问题或提供其他详细信息,以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

2赞 Leo 12/5/2022 #1

在这段代码中,ns 被分配给 NS(id) 现在我可以使用 ns(“Name”)

  mod_Navigation_ui <- function(id){
  ns <- NS(id)
  tagList(
    fluidPage(
      actionButton(ns("test"), "action"),
    )
   )}

如果我删除我必须写:ns <- NS(id)

mod_Navigation_ui <- function(id){
  tagList(
    fluidPage(
      actionButton(NS(id,"test"), "action"),
    )
  )}
2赞 Stéphane Laurent 12/6/2022 #2

闪亮的包装中有功能,但没有功能。NSns

这通常在 Shiny 模块的 UI 部分执行,如 @Leo 的回答所示(但您没有义务使用名称)。然后是一个函数:返回字符串 if .正如@Leo所说,你可以等效地做.也就是说,与 .ns <- NS(id)nsnsns("something")"moduleId-something"id = "moduleId"NS(id, "something")NS(id)("something")NS(id, "something")

library(shiny)

id <- "moduleId"
ns <- NS(id)
ns("something")
# "moduleId-something"
NS(id, "something")
# "moduleId-something"
NS(id)("something")
# "moduleId-something"
unusual_name <- NS(id)
unusual_name("something")
# "moduleId-something"

在Shiny模块的服务器部分,您可以使用。对于非嵌套模块,与 相同。也就是说,等价于 .对于嵌套模块,假设父模块未嵌套,则与父模块的模块 ID 相同。因此,在 Shiny 模块的服务器部分,它比 因为会自动处理模块嵌套的情况更好。session$nssession$nsNS(id)ns <- session$ns; ns("something")NS(id)("something")ns <- session$ns; ns("something")NS(parentid)(NS(id)("something"))parentidsession$nsNS(id)session$ns