我最近在我的项目中实现了Material-UI Slide,并想问问是否有人可以向我解释为什么这样编写代码会起作用:
<div class="container" (mouseenter)="boxHide[3]=false" ...
<div class="xyz" [hidden]="boxHide[3]">
<button (click)="clickButton(3)">click me</button>
但是当我在幻灯片中移动section.map时无法编译。我还要为即将出现的部分设置动画。
{selectedItem && selectedItem.modal && selectedItem.modal.body ? (
selectedItem.modal.body.map((section, key) => (
<Section section={section} key={key} />
))
) : (
<Slide
direction={animate === 'stepIn' ? 'right' : 'left'}
in={animate === 'idle'}
>
<Grid container={true} spacing={3}>
{items.map((item, key) => (
<Grid item={true} xs={6} md={4} lg={3} key={key}>
<MaterialCard
key={key}
onClick={onCardClicked(item)}
className={classes.card}
>
<CardActionArea className={classes.cardArea}>
<CardMedia
image={item.image || undefined}
component="img"
/>
<CardContent className={classes.cardContent}>
<Typography
component="p"
className={classes.cardContentTypographyHeader}
>
<Hyphenated language={de}>{item.label}</Hyphenated>
</Typography>
{item.description ? (
<Typography
component="p"
className={classes.cardContentTypography}
>
<Hyphenated language={de}>
{item.description}
</Hyphenated>
</Typography>
) : null}
</CardContent>
</CardActionArea>
{selectedItem && selectedItem.id === item.id ? (
<>
<div className={classes.cardSelectedOverlay} />
<Done className={classes.cardSelectedOverlayIcon} />
</>
) : null}
</MaterialCard>
</Grid>
))}
</Grid>
</Slide>
该代码适用于每张卡,但其中包含模态的卡除外。模态包含例如文字,文字输入。当我单击其中带有模态的卡片时,出现此错误:
感谢您的帮助!
答案 0 :(得分:2)
在Slide's children prop的文档中,您可以找到:
单个子内容元素。
⚠️需要能够拥有裁判。
Slide
uses React.cloneElement
为单个孩子添加裁判和道具。如果有多个子级,或者如果children
是一个数组(即使该数组仅包含一个子级),则Slide
将得到您遇到的错误,因为未定义children.props
且它是尝试引用children.props.style
。
下面是一个小例子,可以帮助您更好地了解错误原因:
import React from "react";
import ReactDOM from "react-dom";
const MockSlide = ({ children }) => {
if (children.props) {
return (
<div>
{children}
children.props is defined
</div>
);
}
return (
<div>
{children}
children.props is not defined
</div>
);
};
const sectionArray = [
"An array also causes problems (even if only one element)"
];
function App() {
return (
<div className="App">
<MockSlide>
<div>Single child works fine</div>
</MockSlide>
<br />
<br />
<MockSlide>
<div>Multiple children</div>
<div>causes problems with Slide</div>
</MockSlide>
<br />
<br />
<MockSlide>
{sectionArray.map(section => {
return <div>{section}</div>;
})}
</MockSlide>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
一种可能的解决方案是将Slide
中的所有内容包装在单个<div>
元素中。