当前位置: 首页 > 编程笔记 >

在React.js和HOC中返回相邻元素

邵畅
2023-03-14
本文向大家介绍在React.js和HOC中返回相邻元素,包括了在React.js和HOC中返回相邻元素的使用技巧和注意事项,需要的朋友参考一下

通常,React的render方法中的return语句返回一个div元素,其中包含所有子jsx,如下所示-

render(){
   return (
      <div>
         <h2>Header</h2>
         <p>Test</p>
      </div>
   );
}

这里我们不能简单地返回多个元素,我们需要有一个类似于div的父容器,如上所示。

如果没有父容器元素,那么我们甚至可以返回如下数组:

返回数组时,我们需要为数组的每个元素赋予唯一键

render(){
   return (
      [
         <p key=”1”>Paragraph 1</p>,
         <p key=”2”>Paragraph 2</p>
      ]
   );
}

但是,使用数组无法提供可在包装div元素上执行的css类。

解决上述问题的方法是使用高阶分量(hoc)。通过hoc,我们可以为组件提供附加功能,例如向其添加一些CSS类。

使用高阶分量

创建一个简单的功能组件

import React from ‘react’;
const wrapperComponent = (props)=> props.children
export default wrapperComponent;

在上面的代码示例中,使用上述wrapperComponent代替div元素

import wrapperComponent from ‘wrapperComponent’;
   render(){
      return (
         < wrapperComponent >
            <h2>Header</h2>
            <p>Test</p>
      </ wrapperComponent >
   );
}

现在可以通过该wrapperComponent添加css类,让我们来看看如何做。

我们可以在wrapperComponent中添加css类,如下所示:

import React from ‘react’;
const wrapperComponent = (props)=> {
   return (
      <div classes={props.classes}>
         {props.children}
      </div>
   )
}
export default wrapperComponent;

现在,此组件是可重用的组件。我们可以将类作为道具传递给wrapperComponent。

render(){
   return (
      < wrapperComponent classes={classes.App}>
         <h2>Header</h2>
         <p>Test</p>
      </ wrapperComponent >
   );
}

编写HOC的另一种替代方法

const wrapperComponent =(ChildComponent, classes)=>{
   return (props)={
      <div className={classes}>
         <ChildComponent {…props}/>
      </div>
   }
}
export default wrapperComponent;

使用es6传播运算符将道具传递给子组件。

在这里,我们返回一个功能组件,但是我们也可以返回一个有状态的类组件。

const wrapperComponent =(ChildComponent, classes)=>{
   render(){
      return class extends Component{
         <div className={classes}>
            <ChildComponent {…this.props}/>
         </div>
      }
   }
}

在基于类的组件的情况下,通常使用{…this.props}传递道具。必须将道具传递给子组件,以保持它们与该组件上即将出现的道具的链接。

请注意,我们正在返回一个匿名类,因此在关键字class之后没有任何名称。

我们包装在div中的ChildComponent不应在此处进行操作。

现在,我们可以包装我们的ChildComponent并传递css类,如下所示:

render(){
   return (
      < div>
         <h2>Header</h2>
         <p>Test</p>
      </ div >
   );
}
export default wrapperComponent(App, classes.App);

许多第三方库使用像Redux这样的hoc功能来提供附加功能来响应组件。

使用React.Fragment

现在,为了返回多个元素,我们使用了div,数组或自定义react hoc组件。React Team在最新版本中提出了内置功能。

所以我们可以将其用作-

return(
   <React.Fragment>
      //multiple or single jsx code
   </React.Fragment>
)

较短版本的React.Fragment是<>

return(
   < >
      //multiple or single jsx code
   </ >
)

但是在使用此功能之前,请确保React在您的应用程序中具有最新版本。

 类似资料:
  • 我有下面的代码是react.js这是抛出一个错误 “相邻的JSX元素必须包装在一个封闭的标记中”。看起来React不接受相邻的相同标记如何显示表格数据?

  • 我有一个HOC“with Firebase”,它基本上为我的组件提供了一个与Firebase服务通信的接口。 现在,我正在实现另一个HOC"with NotificationsListener",它将接收一个组件和一个路径,然后返回另一个使用"with Firebase"HOC的组件。 这是我第一次创建一个HOC,它返回一个也使用另一个HOC的组件...我的问题基本上是,如果这是可能的与此代码:

  • 本文向大家介绍在JavaScript中查找大于其相邻元素的元素,包括了在JavaScript中查找大于其相邻元素的元素的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数将数字数组作为第一个也是唯一的参数。 函数应从数组中查找并返回一个大于两者的数字,该数字应位于其直接右侧和左侧。如果数组中存在多个这样的元素,则我们的函数应返回其中任何一个。 例如- 如果输入

  • SameGame示例 让我们以一个SameGame板为例。 如果两个块有一个共同的边,则它们是相邻的。组是由至少两个块组成的集合,所有块都是相同类型的,并且每个块都与组的至少一个其他成员相邻。当鼠标悬停在作为组的一部分的块上时,整个组应在视觉上突出显示。 举个矩阵的例子: 鼠标悬停怎么找一套? 我想过递归,但老实说,我不知道该怎么做。BFS似乎是我可以做的事情,但对于这样一个“简单”的事情来说,它

  • 问题内容: 我有计算纯python中相邻元素之间差异的算法: 有什么办法可以用Numpy重写此功能? 问题答案: 有方法: 退货

  • 问题内容: 我是新手,遇到此问题: 当我这样渲染时,它会给我错误提示 我应该为每个html标签或每一行创建一个componenet,还是可以以这种方式呈现。 有什么建议吗? 问题答案: 在React <v16.0中,该方法只能呈现单个根节点。( 更新: 这在v16中已更改,请参见下文)。就您而言,您将返回3个节点。为了解决这个问题,您可以将3个节点包装在一个根节点中: 在React v16中,可以