reactR
reactR provides a set of convenience functions for using
React in R with htmlwidget constructor
templates and local JavaScript dependencies. The React ecosystem is
rich with components that can enhance R web and Shiny apps.
scaffoldReactWidget() helps build htmlwidgets to integrate these
React components as R htmlwidgets. scaffoldReactShinyInput()
does the same for Shiny inputs. The local dependency functions are
modeled after the html_dependency_* functions from RStudio’s
rmarkdown package.
Installation
You can install reactR from CRAN with install.packages("reactR"). For
the development version, please use devtools as shown below.
# install.packages("devtools")
devtools::install_github("react-R/reactR")Creating htmlwidgets with React Components
To wrap a React component as an htmlwidget, please see the tutorial
htmlwidgets with
reactR.
Also, there are a variety of examples in the react-R Github
organization.
reactable is a very well-built
htmlwidget leveraging this functionality.
Shiny Outputs and Inputs
htmlwidgets built with reactR work well in Shiny as outputs. In
version 0.4.0 Alan Dipert has added the ability to easily create
React-based official Shiny inputs with helpers and scaffolds. Please
see the
tutorial
for more details.
Examples
Below are examples of using reactR directly.
library(reactR)
library(htmltools)
browsable(tagList(
tags$div(id = "app"),
tags$script(
"
ReactDOM.render(
React.createElement(
'h1',
null,
'Powered by React'
),
document.getElementById('app')
)
"
),
#add core-js first to work in RStudio Viewer
html_dependency_corejs(),
html_dependency_react()
))reactR uses the V8 package if available to transform JSX and
ES2015 code with babel.
library(reactR)
library(htmltools)
browsable(
tagList(
tags$div(id = "app"),
tags$script(
babel_transform('ReactDOM.render(<h1>Powered By React/JSX</h1>,document.getElementById("app"))')
),
# add core-js shim first for React in older versions of RStudio Viewer
#html_dependency_corejs(),
html_dependency_react()
)
)Contributing and Code of Conduct
We welcome contributors and would love your participation. Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by the terms.