使用反应上下文实现某视频剪辑软件插槽狭槽功能
首先来看下某视频剪辑软件的狭槽的实现
基本布局组件,具名插槽名字定义以及默认插槽
div class='container '标题槽名称=' header '/槽/标题主槽/槽/主页脚槽名称='页脚'/槽/页脚/divtemplate提供内容渲染的组件
基本布局模板v形槽:头部h1主要内容可能有一个页面标题/h1/模板爸爸段落/p PAn .另一个/p .模板v形槽:英尺的一些联系信息/p/模板/基本布局最终会渲染出已下架结构
基本布局模板v形槽:头部h1主要内容可能有一个页面标题/h1/模板爸爸段落/p PAn .另一个/p .模板v形槽:英尺的一些联系信息/p/模板/基本布局言归正传,怎样使用反应的语境实现某视频剪辑软件的这一功能呢
一首先确认下布局组件的结构
从"反应"导入反应{组件};从""导入SlotProvider ./SlotProvider "从导入插槽"。/Slot'class应用程序输出扩展组件{静态显示名称=' AppLayout ' render(){ return(div类名=' container ' header Slot name=' header '/Slot/header主Slot/Slot/主页脚Slot name=' footer '/Slot/footer/div)} }导出默认SlotProvider(AppLayout)2对此结构输出具体内容的组件
从"反应"导入反应{组件};从""导入应用输出./AppLayout "从导入加载项"。/AddOn '导出默认类应用扩展组件{ render(){ return(AppLayout AddOn slot=' header ' h1这里可能是一个页面标题/h1 /AddOn AddOn p主要内容的一个段落p/p另一个段落/p /AddOn AddOn插槽='页脚p这里有一些联系信息/p /AddOn /AppLayout ) }}3其中插件类似于上面某视频剪辑软件的模板,所以下面来实现这个简单的只是用来提供狭槽标识和孩子们内容的组件插件的实现
从“反应”导入做出反应;从“prop-type”const AddOn=()=nullAddOn。道具类型={ Slot :道具类型。string } AddOn。默认类型={ Slot : ' $ $ default ' } AddOn。显示名称=“AdDon”导出默认插件4插槽组件
从“反应”导入做出反应;从""导入{ SlotContext } ./SlotProvider '从prop-type ' const Slot=({ name,children })={ return (SlotContext .consumer {(value)={ const addOnRenderer=value。request addOnRenderer(name)return(addOnRenderer addOnRenderer())| | children | | null } }/slot context .消费者)}插槽。显示名称=“插槽”插槽。proptypes={ name : proptypes。字符串}插槽。default props={ name : ' $ $ default ' }导出默认槽5接下来就是对狭槽进行解析的特设插槽提供商组件了
从"反应"导入反应{组件};函数获取显示名称(组件){返回组件。显示名称| |组件。名称| | '组件' }导出const slot上下文=react。create context({ request addnrenderer :()={ })const slot provider roc=(WrappedComponent)={ return class extended Component { static display name=` slot provider($ { getdisplay name(WrappedComponent)})`//用于缓存每个AddOn /的内容addOnRenderers={ } requestAddOnRenderer=(名称)={ if(!这个。addonrenderers[name]){ return undefined } return()=(this。addonrenderers[name])} render(){ const { children,restProps }=这个。道具if(儿童){//以k-v的方式缓存AddOn /的内容常数=反应孩子们。对数组(子代)常量名称选中=[]this。AddAnRenderers={ } arr。foreach(item={ const ItemType=item。键入控制台。日志(' ItemType ',ItemType)if(item。打字。显示名称===' AddOn '){ const slot name=item。道具。插槽| | ' $ $默认值'//确保内容唯一性如果(名称已检查。查找索引(item=item===槽名)!==-1) {抛出新错误(` Slot(${slotName})已被占用`)}这个。AddAnRenderers[插槽名称]=item。道具。已检查儿童姓名。push(槽名)} })} return(槽上下文.提供程序值={ { request addonrenderer : this。requestaddunrenderer } } wrappeComponent {.restProps}//SlotContext .提供者)} } }导出默认的slotproviderhorc6最终渲染结果
总结
以上所述是小编给大家介绍的使用反应上下文实现某视频剪辑软件插槽狭槽功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
版权声明:使用反应上下文实现某视频剪辑软件插槽狭槽功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。