- Notifications
You must be signed in to change notification settings - Fork 37
Open
Description
Hello,
If we build a React component without attributes, we get an empty unnamed list in attribs:
> str(React$Component("Children")) List of 3 $ name : chr "Component" $ attribs : list() $ children:List of 1 ..$ : chr "Children" - attr(*, "class")= chr [1:2] "reactR_component" "shiny.tag" This is bad, because this empty list is converted to an empty array in the JavaScript side:
> jsonlite::toJSON(list()) [] However the attributes must be an object, not an array. So we need an empty named list.
To get such a list, one can use rlang::dots_list. That is, instead of
> reactR:::`$.react_component_builder` function (x, name){function(...){component(name, list(...)) } } one can do:
function (x, name){function(...){component(name, rlang::dots_list(...)) } } Then this is fine;
> f <- function(...) component("Name", rlang::dots_list(...)) > str(f("Children")) List of 3 $ name : chr "Name" $ attribs : Named list() $ children:List of 1 ..$ : chr "Children" - attr(*, "class")= chr [1:2] "reactR_component" "shiny.tag" > jsonlite::toJSON(f("Children")$attribs){} # yeah, an empty object Note that using rlang does not add a dependency to the package, because it is already a dependency of htmltools.
Metadata
Metadata
Assignees
Labels
No labels