2016-11-22 5 views
8

У меня есть сценарий, когда я передаю данные из редуктора в состояние реакции.Проверка на неопределенное в действии

данные:

{ 
    "id": 1, 
    "title": "Test", 
    "content": { 
     "body": "sdfsdf" 
     "image": "http://example.com" 
    } 
} 

Использование componentWillRecieveProps, это прекрасно работает для получения титула.

componentWillReceiveProps(nextProps) { 
    this.setState({ 
     title: nextProps.blog.title, 
    }) 
} 

Однако, мне трудно получить вложенные поля. Когда я делаю это:

componentWillReceiveProps(nextProps) { 
    console.log("new title is", nextProps.blog.title); 
    console.log("new body content is", nextProps.blog.content["body"]); 
    this.setState({ 
     title: nextProps.blog.title, 
     body: nextProps.blog.content["body"] 
    }) 
} 

Я получаю эту ошибку:

enter image description here

Ошибка неопределенного тела уходит после я нажимаю отладчик и содержимое загружается. В любом случае, я могу бороться с этой проблемой?

Я пытался проверить неопределенными, как это:

if (typeof nextProps.blog.content["body"] != 'undefined'){ 

Но это не сработало, и я считаю, что это потому, что блог не определен.

+1

Я думаю, ваша ошибка состоит в том, что ваше «тело» вложен в «контент» – naomi

+0

@naomi спасибо! Я исправил свой код на blog.content, а не только на контент, это то, что вы имели в виду? Я все еще получаю ту же ошибку. – lost9123193

ответ

5

Что вы можете сделать, это проверить, является ли вы реквизит определяется изначально или не проверяя, если nextProps.blog.content не определен или не так как ваше тело вложено в него, как

componentWillReceiveProps(nextProps) { 

    if(nextProps.blog.content !== undefined && nextProps.blog.title !== undefined) { 
     console.log("new title is", nextProps.blog.title); 
     console.log("new body content is", nextProps.blog.content["body"]); 
     this.setState({ 
      title: nextProps.blog.title, 
      body: nextProps.blog.content["body"] 
     }) 
    } 
} 

Вам не нужно использовать тип для проверки не определено , только оператор строгого !==, который сравнивает значение по их типу, а также значение

для того, чтобы проверить не определено, вы можете также использовать оператор typeof как

typeof nextProps.blog.content != "undefined" 
+1

А я вижу, я ставил неопределенные цитаты. Это сделал трюк. Благодаря! – lost9123193

+1

Нет проблем. Рад был помочь –

0

я лицо же проблема ..... И я получил решение, используя typeof()

if (typeof(value) !== 'undefined' || value != null) { 
     console.log('Not Undefind or Not Null') 
    } else { 
     console.log('Undefind or Null') 
} 

Вы должны использовать typeof() для идентифицированного undefined