Thanks Thomas.
Actually I was doing a clj->js conversion. For clarity I omitted some
macro code I had been using to initialize material ui components. But your
example worked which showed me the bug must be in my macro.
For convenience, my mui macro accepted [& args] allowing me to add multiple
subcomponents in a definition without having to wrap them in a [:div ...]
or call reagent/as-element. This results in a '(component) even if there
is only one component. This worked fine for material ui but when you pass
'(render-fn) to react-window instead of just render-fn, you get the error I
mentioned. sheesh.
sk
On Tuesday, May 5, 2020 at 3:40:40 AM UTC-5, Thomas Heller wrote:
>
> Hey,
>
> if you are falling back to manually calling react/createElement then you
> must ensure that you are passing it data it understands. In your example
> you are passing a CLJS map which React just identifies as a object but not
> as a props object so it thinks you meant a component and warns you.
>
>
> (defn fixed-size-list []
> (react/createElement
> FixedSizeList
> #js {:height 400 :width 300 :itemSize 46 :itemCount 200}
> render))
>
> That should do it, or just use the reagent built-ins for native interop
> via [:> FixedSizeList {:height ...} render]
>
> Cheers,
> /thomas
>
> On Monday, May 4, 2020 at 8:33:16 PM UTC+2, Scott Klarenbach wrote:
>>
>> I'm super happy and impressed with shadow-cljs, it has radically improved
>> my workflow and deployments, and exposed the npm universe without
>> ballooning my js files...so, thanks very much to Thomas Heller,
>>
>> I'm having an issue with react-window interop.
>>
>> I'm successfully importing and using several 3rd party npm modules. It's
>> just this one that is not working.
>>
>> I keep getting the error: Invariant Violation: "Element type is
>> invalid: expected a string (for built-in components) or a class/function
>> (for composite components) but got: object. Check the render method of
>> `List`."
>>
>> I'm using re-frame and shadow-cljs, and the following code to initialize:
>>
>> ...
>> (:require
>> [reagent.core :as reagent]
>> ["react-window" :refer [FixedSizeList]]
>> ...
>>
>> (defn render [props]
>> (reagent/as-element [:div "hey"]))
>>
>> (defn fixed-size-list []
>> (react/create-element
>> FixedSizeList
>> {:height 400 :width 300 :itemSize 46 :itemCount 200}
>> render))
>>
>> but always get the error above. FixedSizeList is refered and available
>> similar to other components. As the error says, the problem is in the
>> render of list.
>>
>> I've tried render returning plain hiccup, reagent elements, react
>> elements, and react classnames as strings, and for some reason the render
>> fn in clojurescript is not valid as in the javascript examples.
>>
>> This same general approach is working elsewhere for 3rd part components,
>> but this is the first time I'm passing a function in as the body of the
>> component, rather than as a value on the property map.
>>
>> Any insights are greatly appreciated.
>>
>> Scott.
>>
>
--
Note that posts from new members are moderated - please be patient with your
first post.
---
You received this message because you are subscribed to the Google Groups
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to clojurescript+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojurescript/68d6128a-b402-4f03-9873-ea91164f0828%40googlegroups.com.