【问题标题】:React component mounting before receiving appropriate state在接收到适当的状态之前反应组件安装
【发布时间】:2017-03-17 15:05:14
【问题描述】:

我需要从 get 请求中接收一些数据,然后将其作为 props 发送到另一个组件。

但是,它似乎在接收我需要的状态之前尝试渲染其他组件。这是当前代码:

class App extends Component{
    constructor(props){
        super(props);
        this.state = {
            logList:[],

        };

    }

    componentWillMount(){
        var me=this;
        var logDirs, currentDirectory;
        const request = axios.get(baseUrl+"/logs")
            .then(function(response){
                logDirs = response.data.logdirs;
                currentDirectory = logDirs[me.props.directory];
                axios.get(currentDirectory.name)
                    .then(function(response){
                        me.setState({
                            logList: response.data.logs
                        });

                    });

        });

    }

    renderLogDirectories(){
        if (this.state.logList.length>0){
            return (<LogDirectories logs={this.state.logList}/>);
        }
    }

    render(){
        if(this.state.logList.length>0)
            return (
                <div>
                            {this.renderLogDirectories()}
                </div>
            );

    }
}

这里是需要接收props的组件:

class LogList extends Component{

    render(){
        var me = this;

        return (
            <ListGroup>
                <ListGroupItem
                    bsStyle="success">{this.props.directory}</ListGroupItem>
                    {(this.props.logs).map(function (logList, key) {
                        return (
                            <Link><ListGroupItem key={key}>
                                {logList}
                            </ListGroupItem></Link>);
                    })}
            </ListGroup>
        );
    }
}

那么,我可以进行哪些更改才能使其正常工作?

就目前而言,我得到的错误是:

未捕获的不变违规:App.render():必须返回有效的 React 元素(或 null)。

Uncaught (in promise) TypeError: Cannot read property '_currentElement' of null (...)

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    如果没有加载任何内容,您需要返回一个有效元素,如错误所示。

    render(){
        if(this.state.logList.length>0) {
            return (
                <div>
                    {this.renderLogDirectories()}
                </div>
            );
         }
         return (<div>Loading</div>);
    
    }
    

    【讨论】:

    • 完全忘记了这一点。这正是它所需要的 :) 谢谢!
    猜你喜欢
    • 2019-10-06
    • 2019-02-27
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多