DEV Community

Cover image for useActionState — A New Hook in React 🎉
Random
Random

Posted on • Updated on • Originally published at Medium

useActionState — A New Hook in React 🎉

Hello Developers 👋,

It’s me your friend Md Taqui Imam, and today I’m going to explain a new and exciting hook in React called useActionState.

Follow me in Github⭐

What is useActionState?

useActionState is a new React hook that helps us update state based on the result of a form action.

It’s like a smart helper that remembers things for us and can change them when we submit a form.

Checkout Official Documentation🚀

Important Note: Right now, useActionState is only available in React’s Canary and experimental channels. To get the most out of it, you’ll need to use a framework that supports React Server Components.

How to use useActionState?

To use this hook, we first need to import it from React:

import { useActionState } from 'react';
Then, we can use it in our component like this:



const [state, formAction, isPending] = useActionState(actionFunction, initialState);


Enter fullscreen mode Exit fullscreen mode

Here’s what each part means:

‘state’ is our current form state
‘formAction’ is a new action we’ll use in our form
‘actionFunction’ is the function that runs when the form is submitted
‘initialState’ is the starting value of our state

When to use useActionState:

Use this hook when you want to update state based on form submissions, especially if you’re using Server Components and want quicker responses.

Example:

Let’s make a simple counter form using useActionState:



import { useActionState } from "react";

async function increment(previousState, formData) {
  return previousState + 1;
}

function StatefulForm() {
  const [state, formAction] = useActionState(increment, 0);
  return (
    <form>
      {state}
      <button formAction={formAction}>Increment</button>
    </form>
  );
}


Enter fullscreen mode Exit fullscreen mode

In this example, every time we click the button, our count goes up by one. The useActionState hook takes care of updating the state when the form is submitted.

For More Detail and example checkout this video 👇

That’s it 😅

Remember, the best way to learn is by doing.

So when useActionState becomes more widely available, give it a try in your projects and see how it can improve your forms!

Alert ⚠️

Don't forget to checkout my new article 🫡

nextjs

Click Here👋

...

Happy coding!


github

twitter

portfolio

buymeacoffee

Top comments (25)

Collapse
 
sfritsch09 profile image
Sebastian Fritsch • Edited

It is definitely nice to use server actions and useActionState, but I still like more control over validation and still prefer Formik + Yup combo. To be honest, the end user doesn't care at the end and cannot tell the difference 👨🏼‍💻

Collapse
 
random_ti profile image
Random

Thanks for you suggestions 🫡

Collapse
 
adesoji1 profile image
Adesoji1

What's the difference between useactionstate and use effect

Collapse
 
random_ti profile image
Random

Both useActionState and useEffect are hooks in React, but they serve different purposes and are used in different scenarios

Collapse
 
joelbonetr profile image
JoelBonetR 🥇 • Edited

Just like salt and mackerel. They both are edible "things" used in different scenarios 😅

What I really meant is...

AI generated response

that we should get back the "get a life" trend but with people that use AI for everything while trying to hide it. Stop it. It's sad. If that wasn't enough its even more easy to spot AI generated text than it is to spot SEO directed content written by humans.

Thread Thread
 
coderamrin profile image
Amrin

😂😂 too good

Collapse
 
digvijay25182316 profile image
Digvijay25182316 • Edited

useActionState : For Form Mutations.
useEffect : lifecycle hook to control components state

Collapse
 
random_ti profile image
Random

🙌

Collapse
 
webjose profile image
José Pablo Ramírez Vargas

So React keeps on piling up things on top of things. Poor React devs, having to keep up with this hot mess.

Collapse
 
random_ti profile image
Random

😅😅

Collapse
 
nospipi profile image
Vaggelis Magonezos

I cant get the message from useActionState to return the server action value, see example

server file :

"use server";
const someServerAction = async (prevState,formData) => {
  try {
    return "success";
  } catch (error) {
    return "error";
  }
};
Enter fullscreen mode Exit fullscreen mode

client file :

"use client"
const SomeClientComponent = () => {
  const [message, formAction, isPending] = useActionState(
    someServerAction,
    "initial"
  );

  console.log(message)

// i get the initial string as defined in the hook, but after form submission, the message becomes undefined where it should log "success" - what am i missing ??

  return (
    <form
      action={formAction}
      className="space-y-6"
    >

..rest is irrelevant
Enter fullscreen mode Exit fullscreen mode
Collapse
 
shaogat_alam_1e055e90254d profile image
Shaogat Alam

Interesting topic! Everything is explained articulately and clearly. For your project, consider checking out this free npm package: select-paginated.

Collapse
 
devluc profile image
Devluc

Great article Taqui. I enjoyed learning from it

Collapse
 
random_ti profile image
Random

Thanks Lucian 👏

Collapse
 
sanzuke profile image
Muhammad Hasanudin

nice share 😃👍🏻

Collapse
 
random_ti profile image
Random

Happy to hear that you liked it 😊

Collapse
 
gopalhb profile image
gopal keshri hb
get your code
Enter fullscreen mode Exit fullscreen mode
Collapse
 
random_ti profile image
Random

😅

Collapse
 
syedmuhammadaliraza profile image
Syed Muhammad Ali Raza

Thanks for Sharing

Collapse
 
random_ti profile image
Random

Happy to hear you liked it 🥰

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
Sloan, the sloth mascot
Comment deleted

Some comments may only be visible to logged-in visitors. Sign in to view all comments.