reactjs - 如何获取数据并将其显示在孙子组件中
问题描述
我有一个父组件,在这里我获取数据:
import React, { useEffect, useState } from "react";
import BoxWithSearch from "../components/sub-components/BoxWithSearch";
import { useDispatch, useSelector } from "react-redux";
import { listCompanies } from "../actions/companyActions";
export default function HomeScreen() {
const dispatch = useDispatch();
const companyList = useSelector((state) => state.companyList);
const { companies } = companyList;
useEffect(() => {
dispatch(listCompanies());
}, [dispatch]);
return (
<div className="container">
<div className="row">
<div className="col-lg-3 col-md-12 col-sm-12 col-xs-12">
<h3 className="title">Brands</h3>
<BoxWithSearch type={"companies"} companies={companies}
</div>
</div>
</div>
);
}
所以公司是这样来的:[
{
"slug": "Dickens-Franecki",
"name": "Dickens - Franecki",
"address": "12158 Randall Port",
"city": "East Maureenbury",
"state": "NE",
"zip": "74529",
"account": 31010023,
"contact": "Lonzo Stracke"
},
{
"slug": "Weissnat-Schowalter-and-Koelpin",
"name": "Weissnat, Schowalter and Koelpin",
"address": "92027 Murphy Cove",
"city": "Port Malachi",
"state": "WY",
"zip": "56670-0684",
"account": 81813543,
"contact": "Kathryne Ernser"
},
]
我试图将这些公司显示为复选框,但 HomeScreen 的子组件是 BoxWithSearch 组件:
import React from "react";
import CheckBox from "../custom-components/CheckBox";
export default function BoxWithSearch(props) {
return (
<div className="search-w-box card">
<div className="card-header">
<input
type="text"
className="form-control"
placeholder={`Search ${props.type}`}
aria-label="Recipient's username"
></input>
</div>
<div className="card-body">
{this.props && this.props.map((prop) => <CheckBox text={prop.name} />)}
</div>
</div>
);
}
后来它转到复选框:
import React from "react";
export default function CheckBox(props) {
const [isChecked, setChecked] = React.useState(false);
const toggleCheck = (e) => {
setChecked(e.target.checked || !isChecked);
};
return (
<>
<label className="checkbox-container">
{props.text}
<input
type="checkbox"
checked={isChecked}
onChange={(e) => toggleCheck(e)}
id={props.id}
/>
<span className="checkmark"></span>
</label>
</>
);
}
但不幸的是,我得到了 Uncaught TypeError: Cannot read properties of undefined (reading 'props'),我真的很困惑,不知道该怎么办。
你能看看吗?谢谢...
解决方案
由于您要传递这样的道具:<BoxWithSearch type={"companies"} companies={companies} />
,您应该期望在您的BoxWithSearch
组件中有一个props
具有属性type
和companies
. 因此,BoxWithSearch
您可以像这样映射公司属性:
props.companies.map((prop) => <CheckBox text={prop.name} />
请注意,在这里您只是将一个text
属性传递给,CheckBox
但在您的代码中您也在寻找id
. 所以我想你应该有这样的东西:
props.companies.map((prop) => <CheckBox text={prop.name} id={prop.id} />
推荐阅读
- arrays - 如何优化合并两个哈希的方法 [RUBY]
- javascript - 提供的 offsetHeight 值错误
- c# - oData 使用 Microsoft.OData.Client.DataServiceContext 获取请求的正文
- python - 秩错误,当我输入正确的张量形状时
- angular - npm start 不工作 npm(错误!在 apm@0.0.0 启动脚本失败。)
- cassandra - 如何从 Cassandra DB 获取/导出所有数据
- log4net - ASP.NET 样板使用 Log4Net 和 Castle Logging 添加额外的日志文件
- git - 确定是什么阻止了从 git 中删除提交
- virtual-machine - 应用程序如何检测到虚拟机管理程序已恢复其客户操作系统?
- postgresql - 将planet_osm_nodes lat lon 转换为“normal” lat long