React-组件children,类似于Vue中的slot

1. 背景

在使用Vue开发组件时,为了能让组件内部更好的自定义,我们可以通过<slot />插槽标签进行占位,可通过name等属性确保对应内容展示到对应位置中,那么在React中如果想达到这样的效果要如何处理呢?

2. 子组件props.children

在props下有children属性,对应父组件调用子组件,子组件开始结束标签中的内容。据此子组件可以这样定义

import './index.scss'

export default function Card(props) {
    return (
        <div className='container'>
            {props.children}
        </div>
    )
}

3. 父组件调用

在父组件中调用子组件,并可以在父组件中自定义所需内容

import Card from "../../components/Card";

<Card>
	<div>
		<SelfTitle title='card1' mb='mb8'/>
		<p>
			这是card中的各种内容
		</p>
	</div>
</Card>

4. vue具名插槽slot -> react props.[名称]

  • vue中拥有具名插槽,父组件调用子组件时可以将内容固定在某个特定的位置或结构中,react中可以吗?当然可以,我们可以直接将某个组件作为一个属性传给子组件中。
  • 我们可以通过props.lineTop[占位内容名称]放置在对应某个结构处,当某个组件的结构我们已知,例如sidebar位置在左侧,右侧上方是header,下方是footer,这样的结构,那么我们就可以对应位置放置props.sidebar、props.header、props.footer使用CSS令其在某个位置,定义好框架的样式,在父组件中就可以调用,并通过组件传参的方式,传入对应的内容啦

5. 完整代码

  • 子组件: 接收children默认内容,以及具名内容,并通过css固定位置样式
import './index.scss'

export default function Card(props) {
    return (
        <div className='container'>
            <div className='line-top'>
                {props.lineTop}
            </div>
            <div>
                {props.children}
            </div>
            <div className='line-bottom'>
                {props.lineBot}
            </div>
        </div>
    )
}
  • 父组件调用: 可以传组件,也可以传自定义的html结构
import Card from "../../components/Card";

<Card
	lineTop={<SelfTitle title='lineTop' mb='mb8'/>}
	lineBot={<div>这是底部内容<h1>哈哈哈</h1></div>}
>
	<div>
		这是想放在其他位置的内容
	</div>
</Card>

如果有用,点个赞呗~

总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 虽然react-virtualized是一个React库,但是你可以通过使用vue-virtual-table来在Vue实现类似的功能。vue-virtual-table是一个基于Vue的虚拟表格组件,可以用于处理大量数据的渲染,并保持流畅的性能。你可以通过在Vue组件引入vue-virtual-table,并传递相应的配置和数据来使用它。\[2\] 请注意,虽然react-virtualized和vue-virtual-table是不同的库,但它们都提供了类似的功能,即通过虚拟化技术来优化大数据量的渲染。因此,你可以使用vue-virtual-table来在Vue实现类似react-virtualized的效果。 #### 引用[.reference_title] - *1* [如何全方位优化你的超大型React应用?](https://blog.csdn.net/qq_29438877/article/details/103951809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vue 生成 dom组件_具有虚拟dom的Vue组件](https://blog.csdn.net/cuk5239/article/details/107697273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [React虚拟滚动介绍与实现](https://blog.csdn.net/cleanHtroop/article/details/123172636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值