reactjs - REACT JS中的Array.find函数无法读取未定义的属性
问题描述
我是 REACT 新手并尝试使用 array.find 函数。出现错误无法读取first_name
未定义的属性。RenderIt
当我在函数内声明 JSON 数组时。不确定,为什么REACT
看不到结果数组。
export default function App() {
const [results, SetResults] = useState([])
useEffect(() => {
const JSON = [{
EMPLID: '345386',
first_name: 'David',
},
{
EMPLID: '345397',
first_name: 'Luca',
},
]
SetfName(JSON[0].first_name)
SetResults(JSON)
}, [])
const RenderIt = () => {
let found = results.find(element => element.EMPLID === '345397')
return ( < div > {
found.first_name
} < /div>)
}
return ( <
div className = "App" >
<
h1 > First Name < /h1> <
h2 > {
(RenderIt())
} < /h2> <
/div>
);
}
解决方案
提供的函数useEffect
仅在第一次渲染后运行,因此在第一次渲染期间,results
是[]
,所以find
找不到任何东西并返回undefined
,这反过来意味着found
是undefined
,因此没有first_name
属性,这是你的错误正在看。
你想检查是否results
有任何东西,如果有的话,唯一可以选择渲染的RenderIt
东西。
把它放在你的底部h2
:
{ results !== [] && RenderIt() }
或者您可以将 RenderIt 更改为:
const RenderIt = () => {
let found = results.find(element => element.EMPLID === '345397')
if (!found) return '';
return (<div> {found.first_name} </div>)
}
推荐阅读
- java - 如何将 JPA AttributeConverter 与 Hibernate-Mapping XML (HBM 4.3) 一起使用?
- python - 如何在 kivy python 中创建列表框?
- c# - 生产者/消费者没有产生预期的结果
- type-conversion - 将间隔列从 teradata 导入 SQL Server
- c++ - 我写了一个快速排序代码,逻辑看起来很正确,但控制台上没有输出
- android - 为 Native Android Project 构建 apk 时目标不兼容
- sql - 以下递归查询的最佳实现是什么?
- python - 如何在 Google Colaboratory 中使用 IBM python 模块“pixiedust”?
- gitlab - 如何正确沟通 CI/CD 管道中的不同阶段
- airflow - 我们如何将架构和表更改部署为 Airflow 工作流程的一部分?