Function leptos_server::create_multi_action
source · pub fn create_multi_action<I, O, F, Fu>(action_fn: F) -> MultiAction<I, O>
Expand description
Creates a MultiAction to synchronize an imperative async
call to the synchronous reactive system.
If you’re trying to load data by running an async
function reactively, you probably
want to use a create_resource instead. If you’re trying
to occasionally run an async
function in response to something like a user clicking a button,
you’re in the right place.
async fn send_new_todo_to_api(task: String) -> usize {
// do something...
// return a task id
42
}
let add_todo = create_multi_action(|task: &String| {
// `task` is given as `&String` because its value is available in `input`
send_new_todo_to_api(task.clone())
});
add_todo.dispatch("Buy milk".to_string());
add_todo.dispatch("???".to_string());
add_todo.dispatch("Profit!!!".to_string());
assert_eq!(add_todo.submissions().get().len(), 3);
The input to the async
function should always be a single value,
but it can be of any type. The argument is always passed by reference to the
function, because it is stored in Submission::input as well.
// if there's a single argument, just use that
let action1 = create_multi_action(|input: &String| {
let input = input.clone();
async move { todo!() }
});
// if there are no arguments, use the unit type `()`
let action2 = create_multi_action(|input: &()| async { todo!() });
// if there are multiple arguments, use a tuple
let action3 =
create_multi_action(|input: &(usize, String)| async { todo!() });