los*_*193 31 components undefined reactjs redux
我有一个场景,我将数据从reducer传递到我的反应状态.
数据:
{
"id": 1,
"title": "Test",
"content": {
"body": "sdfsdf"
"image": "http://example.com"
}
}
Run Code Online (Sandbox Code Playgroud)
使用componentWillRecieveProps,这非常适合检索标题.
componentWillReceiveProps(nextProps) {
this.setState({
title: nextProps.blog.title,
})
}
Run Code Online (Sandbox Code Playgroud)
但是,我在检索嵌套字段时遇到了困难.当我这样做:
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"]
})
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
单击调试器并加载内容后,未定义主体的错误消失.无论如何我能解决这个问题吗?
我试着像这样检查undefined:
if (typeof nextProps.blog.content["body"] != 'undefined'){
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,我相信这是因为博客未定义.
Shu*_*tri 28
你可以做的是检查你的道具是否最初定义,检查是否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"]
})
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要使用type来检查undefined,只需要使用strict运算符!==
来比较值的类型和值
为了检查undefined,您也可以使用typeof
运算符
typeof nextProps.blog.content != "undefined"
Run Code Online (Sandbox Code Playgroud)
MD *_*hik 13
我遇到了同样的问题......我通过使用得到了解决方案 typeof()
if (typeof(value) !== 'undefined' && value != null) {
console.log('Not Undefined and Not Null')
} else {
console.log('Undefined or Null')
}
Run Code Online (Sandbox Code Playgroud)
你必须使用typeof()
来识别undefined
如果您还需要检查是否nextProps.blog
不是undefined
;您可以在一条if
语句中完成此操作,如下所示:
if (typeof nextProps.blog !== "undefined" && typeof nextProps.blog.content !== "undefined") {
//
}
Run Code Online (Sandbox Code Playgroud)
并且,当不需要undefined
,empty
或值时;null
你可以让它更简洁:
if (nextProps.blog && nextProps.blog.content) {
//
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试添加一个问号,如下所示。这对我有用。
componentWillReceiveProps(nextProps) {
this.setState({
title: nextProps?.blog?.title,
body: nextProps?.blog?.content
})
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
72662 次 |
最近记录: |