【发布时间】:2021-05-22 12:17:09
【问题描述】:
我有一个有条件渲染的组件。尽管不满足条件,但它似乎无论如何都在尝试渲染(我得到一个错误)。
一个简化的例子:
import { useState } from 'react';
const [state, setState] = useState(null)
console.log(state)
console.log(typeof state)
return (
<div>
{state &&
<div>
{state.map(element => <div>{element.title}</div>)}
</div>
}
</div>
)
我收到错误消息:“无法读取 null 的属性 'map'”。我很确定state && 之后的任何内容都不应该触发,所以我对发生的事情感到困惑。
如果可能,我想将null 作为我的状态的初始值(如果我提供一个空数组,这个错误就会消失)。
我已经尝试过各种情况,包括:
state !== nulltypeOf state === 'object'- 在
map之前添加相同的state &&条件
编辑:
console.log(state) 打印 null 但 console.log(typeof state) 打印 object; state 从未更新,null 与 object 同时打印,因此有点令人困惑,尽管如此,这确定了问题的根源。
有人向我指出typeof null 确实是object。
我正在使用处理jsx 的@emotion/react,所以问题可能源于那里。
【问题讨论】:
-
我认为您的输入有误,缺少
useState。但是,您确定您没有在组件的某处设置状态,或者有另一个可能导致该状态的同名变量吗?如果将其从 state 重命名为其他名称会发生什么? -
我只是仔细检查并没有在任何地方重复它(在我的示例中它只称为状态)。如果我提供一个空数组的初始值,该错误就会消失。
-
这很有趣。当你控制台状态和它的类型时,你会得到什么?
-
> console.log(state) 打印 'null' 但 console.log(typeof state) 打印 'object'!因为
null的类型是object。 -
null是一个object类型,所以这是正确的developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…