Skip to content

Get the Input Value ​

Some actions user performed on the page are handled as events, but some should be read as values.

For instance, you may want to get the value of an input element.

Example: Get the value of an input element ​

ts
import { model } from "refina";

const username = model("");

$app([Basics], _ => {
  _.label("Username");
  _.textInput(username, false, "edit me");
  username.value.length && _.button("Clear") && (username.value = "");
  _.p(`Your username is: ${username.value}`);
});

Result

The Model ​

The model Function ​

Because there is no way to pass an intrinsic value by reference in JavaScript, we have to wrap the value in an object, and the model function creates a model object to wrap the value.

Use a Property of an Object as a model ​

Sometimes you may want the input component to read and write a property of an object.

The function propModel can create a model from a property of an object:

ts
import { fromProp } from "refina";
const user = { username: "" };
$app([Basics], _ => {
  _.label("Username");
  _.textInput(fromProp(user, "username")); 
});

The Model Type ​

The definition of Model is:

ts
type Model<T> = T | JustModel<T>;

The unwrap Function ​

This function can extract the value from a model.

ts
const intrinsicValue = 1;
assert(unwrap(intrinsicValue) === 1);

const wrappedValue = model(1);
assert(unwrap(wrappedValue) === 1);

INFO

If the wrapped value is defined via model function, it is of type JustModel<T>, so you don't need to use unwrap function to extract the value. You can access yourModel.value directly.

The _.$updateModel Function ​

Corresponding to unwrap function, this function can update the value of a model.

Another Way to Get Input Value ​

Sometimes you may want to get the input value and do something with it, but you don't want to store the value in a variable.

The following example stores the input value to the session storage, instead of a variable.

ts
$app([Basics], _ => {
  _.label("Username");
  if (_.textInput(sessionStorage.getItem("username") ?? "")) {
    sessionStorage.setItem("username", _.$ev);
  }
});

The logic is that, if the input value is changed, the textInput component will emit an event, and the event data is the new value, which can be accessed via _.$ev.

Result