首页 > 解决方案 > React 中的状态为空

问题描述

我收到此错误:

类型错误:this.state 为空

有这样的代码,但它不起作用....知道为什么吗?

我想更改标签的文本 (reanalyzeButton)

阅读几个文档和教程,它似乎应该工作。不知道为什么它会这样。

这是我使用 React 0.13 使用的继承代码

var ProjectHeader = React.createClass({

    displayName: 'ProjectHeader',
    intervalId: null,
    state: {
    projectjson: [],
    label: '',
  },

    componentDidMount() {


        // Now we need to make it run at a specified interval
        this.intervalId = setInterval(this.refresh, 1000);
        this.setState({ label: '<span><i className="octicon octicon-sync" /> Project queued for analysis: <strong>{queuePosition}</strong>.</span>'});
      },

refresh : function(){

   if (this.state.projectjson.analysis_status == 'succeeded') {

      clearInterval(this.intervalId);
     this.setState({label: '<A onClick={this.analyzeProject} title="Request an analysis of the project"><i className="octicon octicon-sync"/> Check for new commits</A>'});
    }

render : function(){

  if (props.project.analysis_status == 'in_progress') {
            //reanalyzeButton = <A onClick={this.analyzeProject} title="Request a re-analysis of the project"><i className="fa fa-refresh fa-spin" /> Analysis in progress</A>
            reanalyzeButton = this.state.label
        } else if ((!props.project.analyze) || props.project.analysis_priority == 0) {
            //reanalyzeButton = <A onClick={this.analyzeProject} title="Request an analysis of the project"><i className="octicon octicon-sync"/> Check for new commits</A>
           reanalyzeButton = this.state.label
        } else {
            //reanalyzeButton = <span><i className="octicon octicon-sync" /> Project queued for analysis: <strong>{queuePosition}</strong>.</span>
            reanalyzeButton = this.state.label
        }

 return  <div className="project-header" itemScope itemType="http://schema.org/Code">
                    <div className="row">
                        <div className="col-xs-12 col-sm-9">
                            <div className="clearfix">
                                {projectHeader}
                            </div>
                        </div>
                        <div className="col-xs-12 col-sm-3">
                            <span className="qc-badge">
                            {badge}
                            </span>
                        </div>
                    </div>
                    <div className="row">
                        <div className="col-xs-12">
                            <ul className="meta">
                                {fetchStatus}{projectInfo} <li>{reanalyzeButton}</li>
                            </ul>
                            <ul className="tags hidden-xs">
                                {tagList}
                            </ul>
                        </div>
                    </div>

标签: reactjs

解决方案


您需要指定一种getInitialState方法才能设置初始状态。见这里:https ://reactjs.org/docs/react-without-es6.html#setting-the-initial-state


推荐阅读