fable-compiler / fable-react

Fable bindings and helpers for React and React Native
MIT License
273 stars 67 forks source link

FunctionComponent.Of functions cache breaks reusable code #241

Open DunetsNM opened 1 month ago

DunetsNM commented 1 month ago

This is how FunctionComponent.Of caches passed function:

// Cache the render function to prevent recreating the component every time when FunctionComponent.Of
// is called inside another function (including generic values: let MyCom<'T> = ...)
let cacheKey = __callingSourceFile.Value + "#L" + (string __callingSourceLine.Value)

I have a reusable piece of code that uses FunctionComponent.Of for different cases and they result in the same cacheKey. So it picks a wrong function at runtime for all cases but one.

At least the displayName should also be part of the cacheKey (I pass a custom value anyway) or accept optional custom cacheKey (although that would reveal its implementation).

None of the options is available which keeps me pinned to Fable.React 5.4.0 (last version before function caching was intorduced)

DunetsNM commented 1 month ago

Actually my problem was that caller of the Of is also generic code. So it's better to include 'Props type name into the cache key so there's no need to expose internal caching mechanism to library users (requires Of to become inline though).