Good morning all, I have been programmed to think of this
as the pointer to the current object and I keep getting tripped up with the use of this
in clojure. For example in the Fulcro RAD Demo these lines of code:
(defsc LandingPage [this props]
{:query ['*]
:ident (fn [] [:component/id ::LandingPage])
:initial-state {}
:route-segment ["landing-page"]}
(dom/div "Welcome to the Demo. Please log in."))
The first element is of the vector the this
, what is the right way to read it? I feel like I missed something somewhere.@posobin, yeh, that was something that tripped me in the beginning, I even searched for something special that is called this
in Clojure, but from Tony's comments I understood that it is just the variable that carries the instance of the components.
this
is the instance of the component being rendered (rather than the component's class).
It is “abstractly” an instance of that class (for Fulcro’s APIs). Concretely in render it is the this
described by https://reactjs.org/docs/react-component.html#render
But since Fulcro hacks CLJ support on top of the js in render, you should generally treat it as a pure abstract representation of the on-screen instance, and not a concrete OO instance of a class. In fact, when using hooks, there is no class.
That said, for any React API that needs the this
of render, that is what you need.
OK, so the vector [this props]
seems to be a common interface. I think I get it little better, but will need to look through it more to understand its content.
yeah…the props
is because I actually put Fulcro props (which are CLJS data) in a special place on the react props….so the props you get “look like” what you expect, but are in fact just one element of the real js props from React.
That way you get full CLJS experience without having to use js interop.
you can always get raw React props with (.-props this)
The macro just does all that destructuring and lookup for you so you can concentrate on the body of render, and not the details of how things get there
That makes sense, thank you.
JIC, this
can be replaced with any other variable name, there is nothing special about that particular word.