从渲染功能访问状态

时间:2017-08-01 18:33:45

标签: reactjs state

所以我需要运行这行代码:

var vehicles = this.state.vehicles;

在渲染功能中:

render: function(){...}

我目前收到此错误:

  

Uncaught(in promise)TypeError:无法读取属性'state'   未定义

即使这条线有效:

this.setState({vehicles: json})

这也是代码的一部分:

getInitialState: function(){
    this.render = this.render.bind(this)
    return {
      vehicles: []
    }
}

如何解决此错误并访问数据?

4 个答案:

答案 0 :(得分:3)

您不要绑定渲染功能。我假设您使用React.createClass创建组件,因为您使用getInitialState初始化状态。使用React.createClass,React会自动为您执行绑定。

即使您通过扩展React.Component创建组件,render方法和生命周期函数也会自动绑定到React Component上下文。

您的getInitialState功能只是

getInitialState: function(){
    return {
      vehicles: []
    }
  }

示例工作代码段



var App = React.createClass({
    getInitialState: function() {
      console.log(this);
      return {count: 0}
    },
    render: function() {
      return <div>Count:{this.state.count}</div>
    }
})

ReactDOM.render(<App/>, document.getElementById('app'))
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>
<div id="app"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

要使用this.setState,首先必须在组件内的this引用上声明状态变量。

您可以在consturctor中执行此操作,如下所示:

constructor(props) {
  super(props);
  this.state = {...};
}

您可以在React文档中详细了解本地状态:Adding Local State to a Class

答案 2 :(得分:1)

你需要定义初始状态,看起来你没有,因此你得到了这个错误。

class YourComponent extends PureComponent {
  state = {}; // <-- Initialize the state
}

或使用构造函数

class YourComponent extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {}; // <-- Initialize the state
  }
}

或使用ES5(已弃用)

var YourComponent = React.createReactClass({

  getInitialState: function() {
    return {};  // <-- Initialize the state
  },

  // ...

});

答案 3 :(得分:1)

这似乎是一个上下文绑定问题。

  

无法读取属性&#39;州&#39;未定义的

这意味着this未定义。我想你在某些改变处理程序中使用它。尝试onChange={this.changeHandler.bind(this)}