我正在开发 React 项目,并实现了用于图标的渐变生成器。问题是,在 chrome 上一切正常,但 safari 通常只会在第一次渲染图标,例如,如果我执行一些更新操作,例如将视图更改为移动设备或更改组件的状态,它会变成黑色。当我在图标之间切换时,它会重新生成,直到我重复该场景。
我读到 safari 的常见问题是 url 路径没有正确解析,但正如你所看到的,我已经这样做了,即使路径是硬编码的,它也不起作用。还尝试在 safari 中禁用画布渲染。
<svg
width={72}
height={26}
>
<defs>
<linearGradient id={object.id}>
{this.generateStops(object.depthColors ? object.depthColors : [])}
</linearGradient>
</defs>
<rect width={72} height={26} fill={`url(${window.location.href}#${object.id})`}/>
</svg>
我想我不会添加更多代码,因为问题不在于止损生成,它总是返回正确生成的止损。我还尝试向 svg 添加各种参数,例如
id
、viewbox
,但没有帮助。
我最终做的是这样的:
const random = Math.random().toString();
return (
<svg
width={72}
height={26}
>
<defs>
<linearGradient id={random}>
{this.generateStops(colorPalette.depthColors ? colorPalette.depthColors : [])}
</linearGradient>
</defs>
<rect width={72} height={26} fill={`url(#${random})`}/>
</svg>
);
之前的版本也使用唯一的id来生成渐变,但每次选择相同的渐变时并不会刷新。