反应渲染变量未定义

时间:2019-03-12 03:14:29

标签: reactjs renderer

由于某种原因,我不明白,我似乎无法在渲染器中获取状态值,起初我以为这是一个范围问题,但即使更改为var后,我的变量也未定义。

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

 componentDidMount(){

            this.getatuff.then( (result) =>{
                    this.setState({
                        stuff: result.items[0]
                });
            });
        console.log('REACT Coveo component DOM loaded');

    }
    render() {
        var ReactMarkdown = require('react-markdown');
        var project = this.state.stuff;

        debugger;
        if(!Object.entries(project).length === 0){
            var asd = project.body[1].value; <---UNDEFINED
            return (
                <div className="block"> 
                    <ReactMarkdown source={asd} />
                    </div>               
            );
        }

enter image description here

为什么在渲染器中未定义我的Object数组值?

注意:屏幕快照中的两个const变量都更改为var,并且该行为仍然存在。

3 个答案:

答案 0 :(得分:0)

您需要在班级内或state内定义constructor()

constructor(props) {
  super(props);

  this.state = {
    project: // something
  }
}

componentDidMount() { 
  // etc.

答案 1 :(得分:0)

您的示例尚不清楚要实现的目标,但这可能是以下原因之一:

  • 您的font-size上有一个1px的错字(我想您是想说componentDidUpdate
  • this.getatuff似乎是在渲染器上定义的,您的屏幕快照显示它具有键getStuff和其他键,但可能没有键project或{{1} }可能不是数组,或者该数组可能仅包含1个值id:5,而不是两个值bodybody。我建议您调试[0]的结构以获得正确的值

答案 2 :(得分:0)

您在这里遇到语法错误:if(!Object.entries(project).length === 0)应该是if (!(Object.entries(project).length === 0))

render() {
    var ReactMarkdown = require('react-markdown');
    var project = this.state.stuff;

    debugger;
    if (!(Object.entries(project).length === 0)) {
        var asd = project.body[1].value; <---UNDEFINED
        return (
            <div className="block"> 
                <ReactMarkdown source={asd} />
                </div>               
        );
    }