添加outerSection布尔属性后触发React.Children.only错误求助
问题原因与解决方案
问题出在{outerSection && infoBtn}这个表达式上:当outerSection为false时,这个表达式会返回false,React会把false当作一个无效子节点处理。此时你的OverlayTrigger组件会同时拥有原有的子元素和false这两个“子节点”,但OverlayTrigger内部使用了React.Children.only方法,要求必须只有一个有效的React元素子节点,所以触发了报错。
解决方法有两种:
把条件表达式改成返回
null而非false:{outerSection ? infoBtn : null}React会忽略
null、undefined这类空值,不会把它们当作子节点,这样OverlayTrigger始终只有原有的子元素一个有效子节点。把所有内容包裹在一个React Fragment(或
<div>等容器)里:<OverlayTrigger ...> <> {/* 原有的子元素 */} {outerSection && infoBtn} </> </OverlayTrigger>这样不管条件是否成立,
OverlayTrigger都只接收一个Fragment作为子节点,内部的多个元素都被包裹在Fragment里,就不会触发React.Children.only的限制了。
内容的提问来源于stack exchange,提问作者Bayley Sapara
相关产品推荐
相关产品推荐

