fable-react icon indicating copy to clipboard operation
fable-react copied to clipboard

FunctionComponent.Of functions cache breaks reusable code

Open DunetsNM opened this issue 1 year ago • 1 comments

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 avatar May 16 '24 10:05 DunetsNM

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).

DunetsNM avatar May 17 '24 06:05 DunetsNM