Так что в вашем компоненте вы не рендерите детей. Поэтому вам нужно обновить две вещи.
1) Взять реквизиты в компоненте FlipContent, как показано ниже
function FlipContent(props)
2) Использовать реквизиты при рендеринг внутри компонента, как показано ниже
{setFront ? <FrontSide>{props.children}</FrontSide> : null}
{setBack ? <BackSide>{props.children} </BackSide> : null}
проблема на втором шаге в том, что он загрузит все реквизиты дочерних элементов, поэтому вам нужно отрендерить только указанный компонент c. См. Ниже
Обновление
Существует несколько способов решения этого вопроса: один за другим
решение один
Используя опору имени детей
function FlipContent(props) {
const [view, setView] = useState("FrontSide");
function FlippingCard() {
setView(view === "FrontSide" ? "BackSide" : "FrontSide");
}
const component = React.Children.map(props.children, child => {
if (view === child.type.name) {
return child;
}
});
return (
<div className={`flip-content`} onClick={FlippingCard}>
<div className="flip-content-container" style={{ cursor: "pointer" }}>
{component}
</div>
</div>
);
}
Работающий codesandbox
Решение Два
Вместо статического добавления имена можно выводить из опора, это не может обрабатывать один и тот же компонент несколько раз
function FlipContent(props) {
const [view, setView] = useState(props.children[0].type.name);
const ref = useRef(0);
function FlippingCard() {
if (props.children.length - 1 === ref.current) {
ref.current = 0;
setView(props.children[0].type.name);
return;
}
setView(props.children[ref.current + 1].type.name);
ref.current += 1;
}
let component = <span />;
React.Children.forEach(props.children, child => {
if (view === child.type.name) {
component = child;
return;
}
});
return (
<div className={`flip-content`} onClick={FlippingCard}>
<div className="flip-content-container" style={{ cursor: "pointer" }}>
{component}
</div>
</div>
);
}
Работающий codesandbox
Решение три
Рендеринг нескольких компонентов и в одной оболочке сам по себе.
function FlipContent(props) {
const [component, setComponent] = useState(props.children[0]);
const ref = useRef(0);
function FlippingCard() {
if (props.children.length - 1 === ref.current) {
ref.current = 0;
setComponent(props.children[0]);
return;
}
setComponent(props.children[ref.current + 1]);
ref.current += 1;
}
return (
<div className={`flip-content`} onClick={FlippingCard}>
<div className="flip-content-container" style={{ cursor: "pointer" }}>
{component}
</div>
</div>
);
}
Работающий codesandbox
Мне кажется, решение три является самым простым, и у вас есть масштабируемый способ.