javascript 片段应包含多个子项,EsLint错误,如果组件

c9x0cxw0  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(219)

我目前有此代码,但EsLint显示以下错误:“Fragments必须包含多个子项-否则就不需要fragment。"。但如果不将代码 Package 在React. Fragment中,我就无法执行IF。有没有其他方法可以在不允许lint规则的情况下删除此错误?

return (
            <>
                {loading && (
                    <div className={classes.container}>
                        <img
                            alt="loading"
                            src={LoadingAnimation}
                            className={classes.img}
                        />
                    </div>
                )}
            </>
        );
zpf6vheq

zpf6vheq1#

这是一种修复

return loading ? (
                    <div className={classes.container}>
                        <img
                            alt="loading"
                            src={LoadingAnimation}
                            className={classes.img}
                        />
                    </div>
                )
                : null;

编辑

由于这个答案得到了一些支持票,我将进一步解释:
简单地说,Fragment是React组件树中存在的元素,但不会在DOM中呈现。当您需要在JSX表达式中返回多个节点时,片段非常有用。
这是一个非法代码:

const Component = () => (
  return (
    <div>
       Child 1
    </div>
    <div>
       Child 2
    </div>
  );
);

这将产生错误JSX expressions must have one parent element。您可以将它们 Package 在另一个div中,错误就会消失,但最终会得到另一个DOM元素。但是,当您使用Fragment时,React将其理解为'parent element',但此元素不会出现在DOM树中:

const Component = () => (
  return (
    <React.Fragment>
      <div>
         Child 1
      </div>
      <div>
         Child 2
      </div>
    </React.Fragment>
  );
);

此外,您可以使用简写<>表示Fragment:

const Component = () => (
  return (
    <>
      <div>
         Child 1
      </div>
      <div>
         Child 2
      </div>
    </>
  );
);

这个问题的错误在于使用Fragment只返回一个孩子,它当然有效,但没有必要。

相关问题