gaearon / react-proxy

Proxies React components without unmounting or losing their state
460 stars 50 forks source link

Does not work with React 16.3 forwardRef #82

Open haggholm opened 6 years ago

haggholm commented 6 years ago

Please excuse a somewhat vague report as I’m just investigating a rather involved build system.

Our codebase has (a) a custom component base class, which is generally discouraged; and (b) HOCs that use the new forwardRef() functionality. This lead to a very strange breakage when I tried to migrate some components that currently use our internal BaseComponent to instead extend React.Component (or PureComponent) directly: our React Native app crashed in react-proxy’s update() function with the error 'Expected a constructor.'. It appears that when extending the React classes, the component ends up being not a class, but instead an object with the shape (per Chrome debugger)

{
  $$typeof: Symbol(react.forward_ref),
  render: forwardFn(props, ref) { ... }
}

It’s not clear to me why this does not happen with our custom base class: I suppose forwardRef() treats it differently, being a full-blown ES6 class as opposed to what React provides. It’s also not clear to me exactly where I should be filing this bug: react-proxy, react-transform-hmr, metro, …? Any thoughts welcomed.

JulianKingman commented 6 years ago

@haggholm any progress on this issue? Edit: I'm also getting this issue with ReactContext.Provider

haggholm commented 6 years ago

Unfortunately I haven’t had time to return to it yet.

alex-mcleod commented 5 years ago

I have also been getting this issue when using a HOC that includes React.forwardRef. This error only appears when the HOC is applied as a class decorator.

syq7970 commented 5 years ago

+1 same issue.

alex-mcleod commented 5 years ago

I've added some updated information and a short-term fix to https://github.com/facebook/metro/issues/272

lukasikora commented 5 years ago

Similar issue with debugging results.