javascript - react ES6 |子组件未渲染

标签 javascript reactjs babeljs

我正在尝试使用 React 从 firebase 渲染一个数组。我有一个容器 View ,它从 firebase 获取数据,并将数据传递给子组件。这是代码:

Container.jsx

import React from 'react'
import Firebase from 'firebase'
import loadsTable from './loadstable'

class Container extends React.Component{
    constructor(props){
        super(props)
        this.loads = [];
        this.state = {loads:[]}
    }
    render(){
        console.log("render" , this.state.loads)
        return( <div>
                    <loadsTable loads={this.state.loads}/>
                </div>
        )
    }
    componentWillMount(){
        this.firebaseRef = new Firebase("https://***.firebaseio.com/loads");
        this.firebaseRef.on("child_added", function(dataSnapshot) {
            console.log(dataSnapshot.val())
            this.loads.push(dataSnapshot.val());
            this.setState({
              loads: this.loads
            });
        }.bind(this));
    }
}

React.render(<Container/> , document.getElementById('app'))

这样成功获取了数据(加载),和console.logs一样。

这是子组件的代码:

LoadsTable.jsx

import React from 'react'

class loadsTable extends React.Component{

    constructor(props){
        super(props)
        console.log("init loadsTable");
        this.state = {loads:this.props.loads}
    }

    render(){
        console.log("this.state.loads " , this.props.loads);
        console.log("this.state.loads " , this.state.loads);
        var loads = this.props.loads.map(function(load, index){
            console.log("load " , load)
            return <tr><td>{load.load_number}</td></tr>
        });
        return(
            <div className="col-md-7">
                <table className="table table-hover table-bordered table-striped loads">
                    <tbody>
                        {loads}
                    </tbody>
                </table>
            </div>
        )
    }
}

export default loadsTable

这里的问题是没有渲染任何内容,事实上,构造函数中的 console.log 从未被调用。如果我在 Container 构造函数中 console.log LoadsTable,我会得到:

Chrome 开发者控制台输出

function loadsTable(props) {
    _classCallCheck(this, loadsTable);

    _get(Object.getPrototypeOf(loadsTable.prototype), "constructor", this).call(this, props);
    console.log("init loadsTable");
    this.state = { loads: this.props.loads };
}

所以,我的问题是:有人知道我在这里做错了什么以及为什么 LoadsTable 没有被实例化吗?

我正在使用 Gulp 来构建并使用 babelify 来转译 ES6。

对此的任何帮助将不胜感激。提前致谢。

最佳答案

组件名称必须大写。所以应该是这样的

import LoadsTable from ...;

<LoadsTable ... /> 

相反。

参见https://facebook.github.io/react/docs/jsx-in-depth.html#html-tags-vs.-react-components

关于javascript - react ES6 |子组件未渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29668632/

相关文章:

javascript - 代表 PDF 到 blob 的 Base64 - JavaScript

javascript - 在我的情况下如何使用 ng-click 功能?

javascript - React.js 子组件不更新从 props 派生的样式,为什么? (样式组件)

webpack - 碰到我不理解的babel构建错误

javascript - 如何强制特定包的转译

javascript - 如何获得选定的单选按钮 telerik?

javascript - 如果 componentWillUnmount 生命周期方法保持空白怎么办?或保留或写入?

unit-testing - 我可以仅使用浅层渲染而不安装完整的组件树来完成所有单元测试吗?

javascript - React App 将 JS 转换为 ES5 以针对 IE 11

javascript - 从 iframe 访问父级中的 JavaScript 对象