redraw

Types

Default Node in redraw. Use component-family functions to create components. Forwarded ref can be constructed using forward_ref-family functions, while external components can be used with to_component-family functions.

pub type Component

Pass data without props drilling. Documentation

pub type Context(a)

A Ref is a mutable data stored in React, persisted across renders. They allow to keep track of a DOM node, a component data, or to store a mutable variable in the component, outside of every component lifecycle.

pub type Ref(a)
pub type Suspense {
  Suspense(fallback: Component)
}

Constructors

  • Suspense(fallback: Component)

Functions

pub fn act(act_fn: fn() -> Promise(Nil)) -> Promise(Nil)

Test helper to apply pending React updates before making assertions. Documentation

pub fn component(
  name name: String,
  render render: fn(a, List(Component)) -> Component,
) -> fn(a, List(Component)) -> Component

Create a Redraw component, with a name, and a render function. render will accept props, and a list of children.

pub fn component_(
  name name: String,
  render render: fn(a) -> Component,
) -> fn(a) -> Component

Create a Redraw component, with a name, and a render function. This component does not accept children.

pub fn component__(
  name name: String,
  render render: fn() -> Component,
) -> fn() -> Component

Create a Redraw component, with a name and a render function. This component does not accept children nor props.

pub fn create_context(
  default_value default_value: Option(a),
) -> Context(a)

Let you create a context that components can provide or read. Documentation

pub fn forward_ref(
  name name: String,
  render render: fn(a, Ref(b), List(Component)) -> Component,
) -> fn(a, Ref(b), List(Component)) -> Component

Create a Redraw component with children with forwarded ref. Take a look at redraw.dev documentation to get more info.

pub fn forward_ref_(
  name name: String,
  render render: fn(a, Ref(b)) -> Component,
) -> fn(a, Ref(b)) -> Component

Create a Redraw component without children with forwarded ref. Take a look at redraw.dev documentation to get more info.

pub fn fragment(children: List(Component)) -> Component

Fragment allow to group children, without creating a node in the DOM. Documentation

pub fn get_current(from ref: Ref(a)) -> a

Get the current value of a ref.

pub fn keyed(
  element: fn(List(Component)) -> Component,
  content: List(#(String, Component)),
) -> Component

Redraw does not support passing key element to components in an easy way like React does. To simplify this, it uses the same API than Lustre to put keys on children.

fn my_component(props, children) {
  redraw.keyed(my_other_component(props, _), {
    use item <- list.map(children)
    #("my-key", item)
  })
}
pub fn memo(
  component: fn(a, List(Component)) -> Component,
) -> fn(a, List(Component)) -> Component

Memoizes a Redraw component with children.

pub fn memo_(component: fn(a) -> Component) -> fn(a) -> Component

Memoizes a Redraw component without children.

pub fn profiler(children: List(Component)) -> Component

Profile allows to measure code performance for a component tree. Documentation

pub fn provider(
  context context: Context(a),
  value value: a,
  children children: List(Component),
) -> Component

Wrap your components into a context provider to specify the value of this context for all components inside. Documentation

pub fn set_current(of ref: Ref(a), with value: a) -> Nil

Set the current value of a ref, overriding its existing content.

pub fn start_transition(scope scope: fn() -> Nil) -> Nil

Let you update the state without blocking the UI. Documentation

pub fn strict_mode(children: List(Component)) -> Component

Strict Mode should be enabled during development. Documentation

pub fn suspense(
  props: Suspense,
  children: List(Component),
) -> Component

Suspense allow to display a fallback content while waiting for children to finish loading. Documentation

pub fn to_component(
  name name: String,
  component render: fn(a) -> Component,
) -> fn(b, List(Component)) -> Component

Convert a React component to a React-redraw component with children. Give it a name, and send directly the FFI. Don’t worry about the snake_case over camelCase, redraw take care of it for you.

import redraw

@external(javascript, "my_library", "MyComponent")
fn do_my_component(props: props) -> redraw.Component

pub type MyComponentProps {
  MyComponentProps(
    first_prop: Bool,
    second_prop: String,
  )
}

pub fn my_component() -> fn(MyComponentProps) -> redraw.Component {
  redraw.to_component("MyComponent", do_my_component)
}
pub fn to_component_(
  name name: String,
  component render: fn(a) -> Component,
) -> fn(b) -> Component

Convert a React Component to a redraw Component without children. Give it a name, and send directly the FFI. Don’t worry about the snake_case over camelCase, redraw take care of it for you.

import redraw

@external(javascript, "my_library", "MyComponent")
fn do_my_component(props: props) -> redraw.Component

pub type MyComponentProps {
  MyComponentProps(
    first_prop: Bool,
    second_prop: String,
  )
}

pub fn my_component() -> fn(MyComponentProps) -> redraw.Component {
  redraw.to_component_("MyComponent", do_my_component)
}
pub fn use_callback(fun: a, dependencies: b) -> c

Let you cache a function definition between re-renders. dependencies should be a tuple. Documentation

pub fn use_context(context: Context(a)) -> a

Let you read and subscribe to context from your component. Documentation

pub fn use_debug_value(value: a) -> Nil

Let you add a label to a custom Hook in React DevTools. Documentation

pub fn use_debug_value_(
  value: a,
  formatter: fn(a) -> String,
) -> Nil

Let you add a label to a custom Hook in React DevTools, but allow to format it before. Documentation

pub fn use_deferred_value(value: a) -> a

Let you defer updating a part of the UI. Documentation

pub fn use_effect(value: fn() -> Nil, dependencies: a) -> Nil

Let you synchronize a component with an external system. Documentation

pub fn use_id() -> String

Generate unique IDs that can be passed to accessibility attributes. Documentation

pub fn use_imperative_handle(
  ref: Ref(Option(a)),
  handler: fn() -> a,
  dependencies: b,
) -> Nil

Let you customize the handle exposed as a ref. Use use_imperative_handle when you want to customize the data stored in a ref. It’s mostly used in conjuction with forward_ref. Documentation

pub fn use_imperative_handle_(
  ref: Ref(a),
  handler: fn() -> a,
  dependencies: b,
) -> Nil

Let you customize the handle exposed as a ref. Use use_imperative_handle by default, unless you really know what you’re doing. Documentation

pub fn use_layout_effect(
  value: fn() -> Nil,
  dependencies: a,
) -> Nil

Version of useEffect that fires before the browser repaints the screen. Documentation

pub fn use_lazy_state(
  initial_value: fn() -> a,
) -> #(a, fn(a) -> Nil)

Let you add a state variable to your component. Allow to create the initial value in a lazy way. Documentation

pub fn use_lazy_state_(
  initial_value: fn() -> a,
) -> #(a, fn(fn(a) -> a) -> Nil)

Let you add a state variable to your component. Allow to create the initial value in a lazy way. Give an updater function instead of a state setter. Documentation

pub fn use_memo(calculate_value: fn() -> a, dependencies: b) -> a

Let you cache the result of a calculation between re-renders. Documentation

pub fn use_reducer(
  reducer: fn(a, b) -> a,
  initial_state: a,
) -> #(a, fn(b) -> Nil)

Let you add a reducer to your component. Documentation

pub fn use_reducer_(
  reducer: fn(a, b) -> a,
  initializer: c,
  init: fn(c) -> a,
) -> #(a, fn(b) -> Nil)

Let you add a reducer to your component. Allow to initialize the store in a custom way. Documentation

pub fn use_ref() -> Ref(Option(a))

Let you reference a value that’s not needed for rendering. Most used ref you’ll want to create. They’re automatically created to None, and can be passed to attribute.ref or use_imperative_handle. You probably don’t want the ref value to be anything than Option(a), unless you have really strong reasons. Documentation

pub fn use_ref_(initial_value: a) -> Ref(a)

Let you reference a value that’s not needed for rendering. Use use_ref if you’re trying to acquire a reference to a child or to a component. Use use_ref_ when you want to keep track of a data, like if you’re doing some side-effects, in conjuction with get_current and set_current. Documentation

pub fn use_state(initial_value: a) -> #(a, fn(a) -> Nil)

Let you add a state variable to your component. Documentation

pub fn use_state_(
  initial_value: a,
) -> #(a, fn(fn(a) -> a) -> Nil)

Let you add a state variable to your component. Give an updater function instead of a state setter. Documentation

pub fn use_transition() -> #(Bool, fn() -> Nil)

Let you update the state without blocking the UI. Documentation

Search Document