Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Component-launching helper functions in React.Basic.DOM.Util #8

Open
milesfrain opened this issue Aug 6, 2020 · 4 comments
Open

Component-launching helper functions in React.Basic.DOM.Util #8

milesfrain opened this issue Aug 6, 2020 · 4 comments

Comments

@milesfrain
Copy link

Proposing that we add a renderInRoot helper function to make this common pattern easier:

import React.Basic.DOM.Util (renderInRoot)

myComponent :: Component {}
myComponent = do
  component "MyComponentName" \_ -> React.do
    -- ...

main :: Effect Unit 
main = renderInRoot $ myComponent {}

A slightly more verbose option is:

import React.Basic.DOM.Util (createRootElement)

mkMyComponent :: Component {}
mkMyComponent = do
  component "MyComponentName" \_ -> React.do
    -- ...

main :: Effect Unit 
main = do
  root <- createRootElement
  myComponent <- mkMyComponent
  render (myComponent {}) root

We could support both options, and reuse createRootElement in renderInRoot.

For context, Halogen has some convenient helper functions for launching components, such as awaitBody in Halogen.Aff.Util:

hookComponent = Hooks.component \_ _ -> Hooks.do
  -- ...

main :: Effect Unit
main =
  HA.runHalogenAff do
    body <- HA.awaitBody
    void $ runUI hookComponent Nothing body
@JordanMartinez
Copy link

Work is being done to update the cookbook to PureScript 0.15. Is there any update on this?

@mjrussell
Copy link
Member

I'm having a bit of trouble understanding why this helper is necessary for the cookbook to be updated to Purescript 15. Its pretty straightforward to make a non-warning version for mounting a component as can be seen in the example in the README and the classic examples.

If someone wants to make a PR, then I'm happy to consider merging it, but I also have a weak preference for staying close to the React API as much as possible.

@pete-murphy
Copy link
Member

pete-murphy commented Jul 12, 2022

I think the issue is that the iframe in Try PureScript won't have a div with id "root"/"container" for React to target. In the cookbook, we've just been rendering directly in the iframe's body which triggers a warning. So I think to avoid the warning, we'd first have to append a div and then mount the component in that div which would be a bit of boilerplate.

@mjrussell
Copy link
Member

Thanks @ptrfrncsmrph, that helps fill in some gaps in context.

It seems like a problem mostly unique to the Try Purescript's setup and not something most people will face using this library, but Im happy to merge in a little helper if people find it useful. Otherwise i think its fine for it to live in the cookbook

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants