setState(...):只能更新已安装或安装的组件

时间:2016-07-17 11:04:22

标签: reactjs

更新

在我的HTML中发现了问题。我通过在<body>布局中额外添加<?php $this->endBody() ?>,导致脚本被插入到我的Yii两次。

我在SOF中看到了此错误消息的其他解决方案,但我认为我的不同。

我在setState回调中拨打$.get的那一刻,我将收到错误消息。

我已经删除了测试时评论的所有代码,但没有解决错误。

正如您在componentDidMount中所看到的,我两次致电setState。第一个很好,但第二个调用会抛出错误消息。

是否与$.get方法有关?

组件

let GridComponent = React.createClass ( {
        getInitialState ()
        {
            return {
                total_page  : 0,
                next_page   : 0,
                current_page: 0,
                items       : []
            }
        },
        componentDidMount() {
            this.setState ( {
                total_page: 1
            } );
            $.get ( '/entry/getdata?page=' + this.state.current_page, ( d ) => {
                if ( typeof d !== 'undefined' ) {
                    this.setState ( {
                        total_page: 1
                    } );
                }
            } );

        },
        componentDidUpdate() {

        },
        mapDataToGridItems( d ) {

        },
        loadMore() {

        },
        fetchData() {

        },

        render ()
        {
            return (
                <div className="grid-gallery-container">

                </div>
            )
        }

    } )
    ;
ReactDOM.render (
    <GridComponent />, document.getElementById ( 'grid-component-root' )
);

1 个答案:

答案 0 :(得分:0)

当您尝试为未安装的组件调用setState时,通常会出现此错误 - 这通常发生在回调中。 为防止这种情况,您应该使用标记(在getInitialState中设置并在componentWillUnmount中重置)。或者(更好)使用Redux排除可视组件的所有I / O操作和异步调用。