“反应”:“ 16.8.4”
你好,有人知道如何(在渲染之前)检查(功能性)组件中是否存在子代
React.Children.count
React.Children.toArray(children)
不会工作
孩子是$$typeof: Symbol(react.element)
代码示例为
function ContextMenuItems(): JSX.Element | null {
if (no-items) return null;
...
}
class ContextMenu extends React.Component {
public render(): JSX.Element | null {
if (this.props.children === null) { //ContextMenuItems empty check
return null;
}
return <ContextMenu>{this.props.children}</ContextMenu>
}
}
对于任何帮助,感谢您的想法
答案 0 :(得分:6)
您可以使用ReactDOMServer.renderToStaticMarkup评估子组件。它将jsx
元素转换为字符串。
import ReactDOMServer from 'react-dom/server';
const App = (props) => {
const isNull = isChildNull(props.children);
if (isNull) {
return "render null";
}
return <div>{props.children}</div>;
}
const isChildNull = (children) => {
return !Boolean(ReactDOMServer.renderToStaticMarkup(children))
}
答案 1 :(得分:1)
您可以通过阅读儿童道具来检查组件是否有儿童,连同React.Children.count的代码将是:
int64
答案 2 :(得分:1)
您可以在将React.Children.count应用为
之前添加 isValidElement 检查。function getValidChildren(children) {
return React.Children.toArray(children).filter((child) =>
React.isValidElement(child)
) as React.ReactElement[]
}
function ContextMenuItems({ children }): JSX.Element | null {
if (!React.Children.count(getValidChildren(children))) return null;
...
}
答案 3 :(得分:0)