Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 高阶组件:默认道具_Javascript_Reactjs_Higher Order Components_Recompose - Fatal编程技术网

Javascript 高阶组件:默认道具

Javascript 高阶组件:默认道具,javascript,reactjs,higher-order-components,recompose,Javascript,Reactjs,Higher Order Components,Recompose,我有这段代码,并试图用react类包装一个HOC。首先,我想要覆盖默认参数的一部分。这是我的代码(您不需要阅读全部代码,问题是关于HOC中的defaultProps) 首先是组成部分: 从“React”导入React; //重组 从“重新组合/组合”导入组合; 从“重新组合/defaultProps”导入defaultProps; 使用状态从“重新组合/使用状态”导入; 从“重新组合/withHandlers”导入withHandlers; 从“重新组合/withProps”导入withProp

我有这段代码,并试图用react类包装一个HOC。首先,我想要覆盖默认参数的一部分。这是我的代码(您不需要阅读全部代码,问题是关于HOC中的defaultProps)

首先是组成部分:

从“React”导入React;
//重组
从“重新组合/组合”导入组合;
从“重新组合/defaultProps”导入defaultProps;
使用状态从“重新组合/使用状态”导入;
从“重新组合/withHandlers”导入withHandlers;
从“重新组合/withProps”导入withProps;
//乌提尔斯
从'react css themr'导入{themr};
从“/utils/fakeData”导入{suslovkaCoords,generateMarkers};
//控制
从“./controls/Map”导入CanvasHoverMap;
从“./controls/Markers/HoveredTooltipMarker”导入HoveredTooltipMarker;
从“./controls/Markers/ToolTimparker”导入ToolTimparker;
//组成部分
从“../RoomTooltip/RoomTooltip”导入RoomTooltip;
//风格
从“/map.sass”导入样式;
从“./controls/Map/mapSytles”导入贴图样式;
常数=3000;
导出常量映射=({
主题
风格
选项,
马克距离,
标记,
渲染器,
渲染器,
mapParams:{
快速移动
居中
},
setMapParams,
安姆桑奇酒店,
精选营销员,
设置选定的Marker,
伊斯莫比尔,
刷新
}) => (
);
现在,特设委员会:

导出常量mapHOC=compose( 主题(“地图”,样式), 默认道具({ 选项:{ 滚轮:对, 动物控制:对, ZoomControl选项:{ 位置:1,//google.maps.ControlPosition.LEFT\u顶部 }, minZoom:3, 缩放:10, maxZoom:18, //禁用双击缩放:真, 样式:地图样式, }, 风格:{ 弹性:1, }, 悬停距离:15, 标记距离:15, 标记:生成标记(标记计数,0.0003), }), 带状态('mapParams','setMapParams',{center:suslovkaCoords,zoom:8}), 带状态('selectedMarker','setSelectedMarker',null), withProps({selectedMarker})=>({ isSelected:(标记)=>selectedMarker ?selectedMarker.id==marker.id :错, })), 带处理器({ onmparamschange:({setMapParams})=>({center,zoom,bounds})=>{ setMapParams({中心,缩放,边界}); log('setMapParams',{center,zoom}); }, renderMarker:({theme,setSelectedMarker,isSelected,isMobile})=>(marker)=>{ 常量ToolTimparkerProps={ 关键字:marker.id, 主题:{theme}, 主题空间:“工具提示标记器”, 初始规模:1, 默认比例:1, 悬停比例:1.3, tooltipContent:, 填充偏移:10,//用于工具提示位置 ToolTipContentHight:240,//不需要精确,用于工具提示位置 tooltipContentWidth:200,//无需精确,用于工具提示位置 setSelectedMarker:setSelectedMarker, 已选:isSelected(标记), 马克:马克, …标记, }; 返回isMobile ? : ; }, //确保当前实现中的标记是平铺标记,而不是所有标记。 //使用平铺是因为它允许此处未使用的某些性能优化 渲染标记:()=>({ctx,markers,tileSize})=>{ clearRect(0,0,tileSize,tileSize); 常数半径=5; markers.forEach(({/*id,*/x,y})=>{ //这里只有圆圈,但可以是图像,使用id或其他标记道具进行渲染 ctx.fillStyle='rgba(0,0,0,0.1)'; ctx.beginPath(); ctx.弧(x,y,半径+3,0,数学PI*2,真); ctx.closePath(); ctx.fill(); ctx.fillStyle='白色'; ctx.beginPath(); ctx.弧(x,y,半径+2,0,数学π*2,真); ctx.closePath(); ctx.fill(); ctx.fillStyle='#00b92a'; ctx.beginPath(); 弧(x,y,半径,0,数学π*2,真); ctx.closePath(); ctx.fill(); }); }, }), ); 我想从defaultProps中删除“markers:generateMarkers(markers\u COUNT,0.0003)”并从外部提供标记

到目前为止,我尝试的是:

const newmap=mapHOC(map);
类MapWithState扩展了React.Component{
建造师(道具){
超级(道具);
}
render(){
常量标记=生成标记(标记计数,0.0003);
返回();
}
}
导出默认MapWithState;
//导出默认的mapHOC(map);

你知道怎么做吗?我希望这件事能顺利完成。谢谢

在创建组件时反应合并道具

也就是说,当一个组件(JSX)被实例化时,它会为其创建一个公共数据和私有数据,即分别为state和props

当为组件创建道具时,它将获取所有参数道具(来自被调用方),并考虑是否在该类中声明了任何可以填充的默认道具

类似于
Object.assign({},{…defaultProps},{…userProps})
其中,
defaultProps
将被
userProps
覆盖。如果
userProps
不可用,则将考虑
defaultProps


因此,在您的情况下,您需要删除一个默认道具,
这应该会起作用。

非常感谢。这就是我想做的。第一次不起作用,但第二次尝试后,一切都很好。甚至没有必要删除默认的道具!