Module JSX
JSX module
The JSX module provides functions to render HTML elements in a declarative style.
let html: string = JSX.render(
<div>
<h1> {JSX.string("Hello, World!")} </h1>
</div>
);
let html: string = JSX.render (
<div>
<h1>(JSX.string "Hello, World!")</h1>
</div>
);
type elementAn abstract type that represents a JSX.element
val render : element -> stringRender a JSX.element as a string.
This function takes a JSX.element and converts it into its corresponding HTML string representation.
let html: string = JSX.render(
<div>
<h1> {JSX.string("Hello, World!")} </h1>
</div>
);
Printf.printf("%s", html); /* <div><h1>Hello, World!</h1></div> */
let html: string = JSX.render (
<div>
<h1>(JSX.string "Hello, World!")</h1>
</div>
Printf.printf "%s" html (* <div><h1>Hello, World!</h1></div> *)
val render_to_channel : Stdlib.out_channel -> element -> unitRender a JSX.element directly to an output channel.
This function writes the HTML representation directly to the channel, avoiding the intermediate string allocation that render requires.
JSX.render_to_channel(stdout,
<div>
<h1> {JSX.string("Hello, World!")} </h1>
</div>
);
JSX.render_to_channel stdout (
<div>
<h1>(JSX.string "Hello, World!")</h1>
</div>
);
val render_streaming : (string -> unit) -> element -> unitRender a JSX.element using a streaming callback function.
This function renders the element and passes the result to the callback function, useful for frameworks that support streaming responses.
JSX.render_streaming(html => Dream.write(stream, html),
<div>
<h1> {JSX.string("Hello, World!")} </h1>
</div>
);
JSX.render_streaming (fun html -> Dream.write stream html) (<div>
<h1>(JSX.string "Hello, World!")</h1>
</div>)
val float : float -> elementHelper to render a float.
This function helps in rendering a float value as a JSX element.
let element : JSX.element = JSX.float(3.14);
let element : JSX.element = JSX.float 3.14
val fragment : children:element list -> unit -> elementval int : int -> elementHelper to render an integer.
This function helps in rendering an integer value as a JSX element.
let element : JSX.element = JSX.int(42);
let element : JSX.element = JSX.int 42
val list : element list -> elementHelper to render a list of elements.
This function takes a list of JSX elements and returns a single JSX element that contains all of them. This is useful for rendering dynamic lists of elements.
let element : JSX.element =
JSX.list([ JSX.string("Item 1"), JSX.string("Item 2"), JSX.string("Item 3") ]);
let element : JSX.element =
JSX.list
[ JSX.string "Item 1"; JSX.string "Item 2"; JSX.string "Item 3" ]
val array : element array -> elementHelper to render an array of elements.
This function takes an array of JSX elements and returns a single JSX element that contains all of them. This is useful for rendering dynamic arrays of elements.
let element : JSX.element =
JSX.array
[| JSX.string("Item 1"), JSX.string("Item 2"), JSX.string("Item 3") |]
let element : JSX.element =
JSX.array
[| JSX.string "Item 1"; JSX.string "Item 2"; JSX.string "Item 3" |]
type attribute =
string
* [ `Bool of bool | `Int of int | `Float of float | `String of string ]Represents an attribute of an HTML element. It consists of a name and a value which can be of several types.
This is used by the ppx to create the attributes of the HTML element, and rarely used directly.
val node : string -> attribute list -> element list -> elementThe function to create an HTML DOM Node.
It takes a tag name, a list of attributes, and a list of child elements to create an HTML node.
let link : JSX.element =
JSX.node("a",
[ ("href", `String("https://ocaml.org") ],
[ JSX.string("OCaml") ]);
let link : JSX.element =
JSX.node "a"
[ ("href", `String "https://ocaml.org") ]
[ JSX.string "OCaml" ]
val null : elementHelper to represent nullability in JSX.
This is useful to represent and pattern match against null or empty elements.
let element : JSX.element = JSX.null;
let element : JSX.element = JSX.null
val string : string -> elementHelper to represent an element as a string.
This function allows you to directly render a string as a JSX element.
let element : JSX.element = JSX.string("Hello, World!");
let element : JSX.element = JSX.string "Hello, World!"
val text : string -> elementA deprecated function to render a text string.
This function is deprecated in favor of JSX.string.
let element : JSX.element = JSX.text("Hello, World!");
let element : JSX.element = JSX.text "Hello, World!"
deprecated Use JSX.string instead
val stringf : ('a, unit, string, element) Stdlib.format4 -> 'aHelper to render formatted text as a JSX element.
This formats a string using Printf-style directives and then renders the result as escaped text, just like JSX.string.
let element : JSX.element = JSX.stringf("Hello %s #%i", name, count);
let element : JSX.element = JSX.stringf "Hello %s #%i" name count
val unsafe : string -> elementHelper to bypass HTML encoding and treat output as unsafe. This can lead to HTML escaping problems, XSS injections, and other security concerns. Use with caution.
A common use case for bypassing the HTML encoding is to render a script or style tag.
let content: string = "Raw HTML";
let script: JSX.element = <script>{content}</script>
let content: string = "Raw HTML" in
let script: JSX.element = <script> content </script>
val escape : Stdlib.Buffer.t -> string -> unitEscape a string and write it directly to a buffer.
This escapes ampersand, less-than, greater-than, apostrophe, and double-quote characters.
This is an advanced function used mostly by the PPX for optimized rendering. Most users should prefer JSX.string.
let buf = Buffer.create(256);
JSX.escape(buf, "<script>");
Buffer.contents(buf); /* "<script>" */
let buf = Buffer.create 256 in
JSX.escape buf "<script>";
Buffer.contents buf (* "<script>" *)
val write : Stdlib.Buffer.t -> element -> unitWrite an element directly to a buffer.
This is an advanced function used mostly by the PPX for optimized rendering when building HTML strings incrementally.
let buf = Buffer.create(256);
JSX.write(buf, (JSX.string "Hello"));
Buffer.contents(buf); /* "Hello" */
let buf = Buffer.create 256 in
JSX.write buf (JSX.string "Hello");
Buffer.contents buf (* "Hello" *)