hyperstack-org / hyperstack-org/hyperstack

es6 modules are assumed to have a default component

Đang mở
#231 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug good first issue
Ngôn ngữ chính
JavaScript
Star
538
Fork
41
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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 ----
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.