传递给子组件的道具未定义但 console.log 显示道具的值
Props passed to child component is undefined but console.log shows props' value
我尝试在基于 Gatsby 的应用程序中创建 Carousel。我在将 props 从 Parent 传递到 Child 功能组件时遇到问题。我收到错误 TypeError: props.slide is undefined
但是当我在控制台中检查日志时,我可以看到 props.slide 具有价值
我只是想知道控制台的第一行(上面的屏幕截图)显示的是空道具,对吧?
奇怪的是 codesandbox 没有给出任何错误:https://codesandbox.io/s/ecstatic-snyder-9hjpf
父组件:
//imports...
const carouselItems = [
{
title: "Laser scanning",
picture: "../../../../assets/images/RTC360.png",
content:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. A ad deserunt, enim est exercitationem facilis illum ipsum iure, mollitia placeat quia temporibus voluptatem. Asperiores assumenda id nesciunt totam. Eligendi, neque."
},
{
title: "Mobile mapping",
picture: "../../../../assets/images/RTC360.png",
content:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. A ad deserunt, enim est exercitationem facilis illum ipsum iure, mollitia placeat quia temporibus voluptatem. Asperiores assumenda id nesciunt totam. Eligendi, neque."
}
];
interface CarouselState {
activeIndex: number;
}
class Carousel extends React.Component<any, CarouselState> {
constructor(props: any) {
super(props);
this.state = {
activeIndex: 0
};
}
render() {
return (
<div>
<ul>
{carouselItems.map((slideDescription, index) => (
<CarouselDescriptionRCTypes
key={index}
index={index}
activeIndex={this.state.activeIndex}
slide={slideDescription}
/>
))}
</ul>
</div>
);
}
}
export default Carousel;
子组件:
//imports...
interface CarouselDescriptionProps {
index: number;
activeIndex: number;
slide: {
title: string;
picture: string;
content: string;
};
}
const CarouselDescriptionRCTypes: React.FC<
CarouselDescriptionProps
> = props => {
if (!props) {
return null;
}
console.log(`props${JSON.stringify(props)}`);
console.log(`props.slide.title${props.slide.title}`);
return (
<div>
<strong className="carousel-slide__author">{props.slide.title}</strong>
<small className="carousel-slide__source">{props.slide.content}</small>
</div>
);
};
export default CarouselDescriptionRCTypes;
@Shlang 回答了我的问题。
我一直在
检查 IF 子句中的道具
if (!props) {
return null;
}
这总是 return 正确,因为 props 总是对象,永远不会是未定义的。我相信检查 props 可以防止 return 未定义的错误,这是错误的。
正如@Shlang 提到的,应该通过相同的子句检查 props 中的每个值,例如:
if (!props.slide) {
return null;
}
,或使用例如Lodash 库及其 isEmpty 函数。
我尝试在基于 Gatsby 的应用程序中创建 Carousel。我在将 props 从 Parent 传递到 Child 功能组件时遇到问题。我收到错误 TypeError: props.slide is undefined
我只是想知道控制台的第一行(上面的屏幕截图)显示的是空道具,对吧? 奇怪的是 codesandbox 没有给出任何错误:https://codesandbox.io/s/ecstatic-snyder-9hjpf
父组件:
//imports...
const carouselItems = [
{
title: "Laser scanning",
picture: "../../../../assets/images/RTC360.png",
content:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. A ad deserunt, enim est exercitationem facilis illum ipsum iure, mollitia placeat quia temporibus voluptatem. Asperiores assumenda id nesciunt totam. Eligendi, neque."
},
{
title: "Mobile mapping",
picture: "../../../../assets/images/RTC360.png",
content:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. A ad deserunt, enim est exercitationem facilis illum ipsum iure, mollitia placeat quia temporibus voluptatem. Asperiores assumenda id nesciunt totam. Eligendi, neque."
}
];
interface CarouselState {
activeIndex: number;
}
class Carousel extends React.Component<any, CarouselState> {
constructor(props: any) {
super(props);
this.state = {
activeIndex: 0
};
}
render() {
return (
<div>
<ul>
{carouselItems.map((slideDescription, index) => (
<CarouselDescriptionRCTypes
key={index}
index={index}
activeIndex={this.state.activeIndex}
slide={slideDescription}
/>
))}
</ul>
</div>
);
}
}
export default Carousel;
子组件:
//imports...
interface CarouselDescriptionProps {
index: number;
activeIndex: number;
slide: {
title: string;
picture: string;
content: string;
};
}
const CarouselDescriptionRCTypes: React.FC<
CarouselDescriptionProps
> = props => {
if (!props) {
return null;
}
console.log(`props${JSON.stringify(props)}`);
console.log(`props.slide.title${props.slide.title}`);
return (
<div>
<strong className="carousel-slide__author">{props.slide.title}</strong>
<small className="carousel-slide__source">{props.slide.content}</small>
</div>
);
};
export default CarouselDescriptionRCTypes;
@Shlang 回答了我的问题。 我一直在
检查 IF 子句中的道具 if (!props) {
return null;
}
这总是 return 正确,因为 props 总是对象,永远不会是未定义的。我相信检查 props 可以防止 return 未定义的错误,这是错误的。
正如@Shlang 提到的,应该通过相同的子句检查 props 中的每个值,例如:
if (!props.slide) {
return null;
}
,或使用例如Lodash 库及其 isEmpty 函数。