2015-04-01 63 views
2

我写包装器反应母语在斯卡拉-JSautoGenerateWrapperClass为null反应母语

lazy val reactNative = js.Dynamic.global.require("react-native") 
    val View = reactNative.View 
    val component = ReactNativeB[Unit]("NativeYeah") 
      .render(P => { 
      reactNative.createElement(View,null) 
     }).buildU 
    reactNative.AppRegistry.registerComponent("iOSscala",() => component()) 

组件注册精细,但其未能在创建视图元素!

null不是(评估 'autoGenerateWrapperClass(标签)')”

完整的堆栈跟踪功能:

CTJSLog> "Error: 
stack: 
    getComponentClassForElement  index.ios.bundle:5894 
    validatePropTypes    index.ios.bundle:5634 
    createElement     index.ios.bundle:5681 
    renderApplication    index.ios.bundle:33913 
    run        index.ios.bundle:33858 
    runApplication     index.ios.bundle:33880 
    jsCall       index.ios.bundle:7237 
    _callFunction     index.ios.bundle:7484 
    applyWithGuard     index.ios.bundle:877 
    guardReturn      index.ios.bundle:7286 
    callFunctionReturnFlushedQueue index.ios.bundle:7493 
URL: http://localhost:8081/index.ios.bundle 
line: 5894 
message: null is not a function (evaluating 'autoGenerateWrapperClass(tag)')" 

在调试这个功能

function getComponentClassForElement(element) { 
    if (typeof element.type === 'function') { 
    return element.type; 
    } 
    var tag = element.type; 
    var componentClass = tagToComponentClass[tag]; 
    if (componentClass == null) { 
    tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag); 
    } 
    return componentClass; 
} 

标签值是ReactElement

注意:上面的代码在使用div标签/ react组件的reactjs中正常工作。

编辑:它的问题来自scalajs-react builder,它遵从ReactJS渲染API而不是AppRegistry,关闭问题。

回答

4

如果您尝试渲染的组件未定义,您将看到此错误消息(as per this issue)。在将它传递给registerComponent之前,component的值是多少?

+0

我觉得组件很好,组件是ReactComponentU(un mounted)的一个实例。同时注册var componentClass = ReactNativeComponent.getComponentClassForElement( element );这行很好,甚至我可以看到组件名称。唯一失败的部分是创建视图元素,我相信! – invariant 2015-04-01 13:59:57

+0

好的,当它传递给createElement时,View的价值是什么? – 2015-04-01 14:07:10

+0

reactNative.View – invariant 2015-04-01 14:09:12