2016-02-14 144 views
0

我在使用React 0.14.7渲染子组件时遇到问题 - 这就像React完全忽略它。React not rendering child

下面是启动渲染方法:

ReactDOM.render(
    React.createElement(
     view, 
     { 
      name: 'Rob' 
     } 
    ), 
    document.getElementById('content') 
); 

这里所呈现的主要观点:

var React  = require('react'), 
    LogRegBack = require('log-reg-back-view'); 

var RegisterView = React.createClass({ 

    render: function() { 
     console.log(1); 
     return React.DOM.div({ 
      children: [ 
       'Hello, ' + this.props.name, 
       LogRegBack, 
       ' How are you?' 
      ] 
     }) 
    } 

}); 

module.exports = RegisterView; 

及这里的被忽略的LogRegBack子组件:

var React = require('react'), 
    styles = require('../../../css/log-reg-back.css'); 

var LogRegBack = React.createClass({ 

    render: function() { 
     console.log(2); 
     return React.DOM.img({ 
      className: styles.logRegBack, 
      src: '/assets/log-reg-back.jpg' 
     }); 
    } 

}); 

module.exports = LogRegBack; 

我正在使用webpack捆绑一切,所以我想也许我有一个配置问题,但是我可以在输出文件中看到我的LogRegBack代码,并且当我在LogRegBack文件中进行更改(我正在使用--watch选项)时,webpack会按预期重新生成。而且,当我启动我的网页时,我看到控制台中记录了'1',但我没有看到'2'。出于某种原因,React甚至没有调用LogRegBack组件的render()方法。

如果我直接添加图像作为我的主视图文件中的孩子时,图像显示出来就好了:

children: [ 
    'Hello, ' + this.props.name, 
    React.DOM.img({ 
     className: styles.logRegBack, 
     src: '/assets/log-reg-back.jpg' 
    }), 
    ' How are you?' 
] 

我在做什么错?

回答

0

我已经习惯了使用JSX,但我怀疑在将LogRegBack作为孩子传递给RegisterView时需要使用createElement。

+1

您的怀疑是正确的;但是,我决定在文档中遵循[此建议](https://facebook.github.io/react/blog/2014/10/14/introducing-react-elements.html#react-without-jsx)并创建一个工厂:'LogRegBack = React.createFactory(require('log-reg-back-view'));' –

+0

这可能是更好的方法,很高兴你找到了。 –