Import / Export ReactJS
Reusing existing React components in ReScript is straightforward. This guide will walk you through the steps required to import and use React components within ReScript, including defining component props and handling various import scenarios.
Basic Example
To reuse a React component in ReScript, create a new module, specify the component's location, and define its props.
Importing from Relative Paths
You can import components from relative file paths using the @module attribute.
Use "default" to indicate the default export, or specify a named export if needed.
Named Export Example
Defining Props Types
You can define a separate type for your component's props within the module.
Props Type Example
module Confetti = {
type confettiProps = {
width: int,
height: int,
}
@module("react-confetti") @react.component(: confettiProps)
external make: confettiProps => React.element = "default"
}
@react.component
let make = () => {
<Confetti width={300} height={300} />
}
Optional Props
To define optional props, use the ? symbol.
module Confetti = {
type confettiProps = {
width: int,
height: int,
initialVelocityX?: int,
initialVelocityY?: int,
}
@module("react-confetti") @react.component(: confettiProps)
external make: confettiProps => React.element = "default"
}
@react.component
let make = () => {
<Confetti width={300} height={300} />
}
Extending Built-in DOM Nodes
To accept existing DOM props for a component, extend the JsxDOM.domProps type.
module Foo = {
type fooProps = {
...JsxDOM.domProps,
customProp: string,
}
@module("foo") @react.component(: fooProps)
external make: fooProps => React.element = "default"
}
@react.component
let make = () => {
<Foo width={"300px"} height={"300px"} customProp="bar" />
}
In this example width and height can be set because JsxDOM.domProps was spread into fooProps.