DEV Community

Ken Aguilar
Ken Aguilar

Posted on • Edited on

3

Purescript - React Basic Hooks, useAff

According to the documentation, useAff is defined like this.

useAff :: forall key a. Eq key => key -> Aff a -> Hook (UseAff key a) (Result a)

Aff is used for asynchronous effects. The docs on Aff is a great place to learn about it!

Back to useAff, when I first encountered this function I didn't
really know what it does. Sure, the type signature gave me some clues, like I need to give me it some key with the condition that this key has to have an Eq instance. The second parameter needs an Aff, then it will return some type Hook. Based on the second parameter this tells me that this is the function I need to make asynchronous effects.

This is my login component using useAff but it didn't start out like this. My first implementation for useAff was something like this

useAff unit $ do
    submitLogin isSubmitting { email: login.email, password: login.password }

I was very confused on why it's only getting called once after render. I also
tried something like this.

useAff "pleaseWork" $ do
    submitLogin isSubmitting { email: login.email, password: login.password }

Of course that didn't work.

I kept going back to this example and this repo, and kept wondering what I'm doing different. Then I had my "eureka" moment. I said to myself, "Maybe the Eq constraint has something to do with it. Maybe it checks the equality of the key parameter I passed in, and if it changes something will happen?" So I changed my implementation to this

useAff login $ do
    submitLogin isSubmitting { email: login.email, password: login.password }

login changes when the button is clicked on this line.
It worked!

References

Purescript React Basic Hooks Documentation

Purescript React Basic Hooks Examples

Purescript React Basic Dogs repo by Peter Murphy

Purescript Aff Documentation

Miles Frain for answering my questions in fpchat

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post