реагировать переменная рендеринга не определено - PullRequest
0 голосов
/ 12 марта 2019

по какой-то причине, которую я не понимаю, я не могу получить значение состояния в моем рендерере, сначала я подумал, что это проблема с областью видимости, но даже после изменения на 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

почему значение моего массива объектов не определено в рендере?

Примечание: обе переменные константы на скриншоте были изменены на var, иповедение сохраняется.

Ответы [ 3 ]

0 голосов
/ 12 марта 2019

На вашем примере неясно, чего вы пытаетесь достичь, но это может быть одной из следующих причин:

  • на вашем componentDidUpdate у вас есть опечатка в this.getatuff (IПредположим, вы пытаетесь сказать, что getStuff
  • project определено для вашего средства визуализации, ваш скриншот показывает, что у него есть ключ id:5 и некоторые другие, но у него может не быть ключа body или body может не быть массивом, или массив может содержать только 1 значение [0] вместо двух значений [0] и [1]. Я предлагаю вам отладить структуру project, чтобы получить правильное значениезначение
0 голосов
/ 12 марта 2019

Вы получили синтаксическую ошибку здесь: 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>               
        );
    }
0 голосов
/ 12 марта 2019

Вам нужно определить state внутри вашего класса или внутри вашего constructor():

constructor(props) {
  super(props);

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

componentDidMount() { 
  // etc.
...