reactjs - React TS:在使用道具作为参数调用函数之前等待道具
问题描述
我通过功能组件使用 React。我的一个组件具有由其父组件传递的道具,例如:
const About = () => {
const { data } = useFetch('About');
return (
<div>
{data && (
<div>
<Title title={data.custom_title} />
<Card
text={data.body}
>
<Skills skills={data.skills} columns={data.n_skills_columns} />
</Card>
</div>
)}
</div>
);
};
这些道具在函数中用于在渲染道具数据之前对其进行操作,例如:
const Skills: FC<SkillsProps> = ({ skills, columns }): JSX.Element => {
const skillsTable = sliceArray(skills, columns);
return (
<div>
skillsTable.map(...)
</div>
);
};
在Skills
组件中,当我使用 useEffect 钩子 console.log 数据时,道具包含数据,但sliceArray()
抱怨它的参数是undefined
.
我已经尝试过的:
const Skills: FC<SkillsProps> = ({ skills_, columns_ }): JSX.Element => {
const [skills, setSkills] = useState([]);
const [columns, setColumns] = useState(1);
useEffect(() => {
setSkills(skills_);
setColumns(columns_);
}, []);
const skillsTable = sliceArray(skills, columns);
我在这里想念什么?
解决方案
您可以为解构的道具添加默认值。不需要useEffect
or useState
(除非您在Skills
组件中以某种方式修改这些值)。
const Skills: FC<SkillsProps> = ({ skills = [], columns = 1 }) => {
const skillsTable = sliceArray(skills, columns);
return ...;
}
如果之前根本不想渲染Skills
组件skills_
并被columns_
加载,那么在父组件中添加加载指示器:
const ParentComponent = () => {
const skills = ...;
if (!skills) return <>Loading skills...</>;
return <Skills skills={skills} />;
}
推荐阅读
- docker - 如何在 Windows Server 2019 上升级 Kubernetes 工作节点?
- javascript - 如何在 java 脚本和 ajax 中将正文发布到 API
- mysql - 在 aws aurora mysql 中获取连接查询的自动增量变量
- android - 是否有代码可以知道是否已加载 firebase-database 数据?
- javascript - material-ui TextField 未清除
- python - openpyxl修改后无法读取
- chirp - 在我的 Chirp Python 应用程序中出现错误,认为我可能已经覆盖了我的 .chirprc 文件
- mysql - 如何将 Oracle SQL 中的 FULL OUTER JOIN 转换为 MySql 语法?
- c# - 为什么反序列化 JSON 时 C# 中有 setter 属性?
- python - 在窗口聚焦时获取用户输入,从文件输入是否聚焦