hyperstack-org / hyperstack-org/hyperstack

es6 modules are assumed to have a default component

未關閉
#231 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
bug good first issue
主要語言
JavaScript
星號
538
分支
41
PR 合併指標
30 天內沒有已合併 PR

描述

related to #185

ES6 modules may not always have a default component. For example `Material-UI`.

The problem is the `eval_native_react_component` method assumes if its an es6 module, then there must be a default. This causes that method to attempt to evaluate properties of `undefined`.

The fix is to check if its an es6 module AND does it have a default:

```ruby
module Hyperstack
module Internal
module Component
class ReactWrapper
...
def self.eval_native_react_component(name)
component = `eval(name)`
raise "#{name} is not defined" if `#{component} === undefined`
# ------------> the following && component.default needs to be added <-------------
component = `component.default` if `component.__esModule && component.default`
is_component_class = `#{component}.prototype !== undefined` &&
(`!!#{component}.prototype.isReactComponent` ||
`!!#{component}.prototype.render`)
has_render_method = `typeof #{component}.render === "function"`
unless is_component_class || stateless?(component) || has_render_method
raise 'does not appear to be a native react component'
end
component
end
end
end
end
end
```

As a work around you can do this in your pack files:
```javascript
Mui = require('@material-ui/core');
Mui.default = Mui // <--- add this line ----
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。