gpt4 book ai didi

reactjs - React SVG不会在属性更新时重新渲染

转载 作者:行者123 更新时间:2023-12-04 02:50:09 25 4
gpt4 key购买 nike

我正在通过 slider 输入控件更新 SVG 过滤器属性,但它不会持续更新呈现的过滤器。

这是工作代码:https://codepen.io/dgwyer/pen/EXmqrb

如果我使用 dangerouslySetInnerHTML设置过滤器然后它可以工作,但是这个黑客不足以在生产代码中使用?

class App extends React.Component {
constructor(props) {
super(props);
this.state = { blur: 2 };
this.blurChange = this.blurChange.bind(this);
}

blurChange(event) {
this.setState({ blur: Number(event.target.value) });
}

render() {
return (
<div>
<svg width="0" height="0" viewBox="0 0 0 0">
<filter id="outline"
dangerouslySetInnerHTML={{
__html: `<feGaussianBlur result="blurOut" stdDeviation="${this.state.blur}" />`
}}
/>
<filter id="outline1">
<feGaussianBlur result="blurOut" stdDeviation={this.state.blur} />`
</filter>
</svg>
<h1 className="fe">Working</h1>
<div className="control"><input type="range" min="0" max="50" onChange={this.blurChange} value={this.state.blur} /><h3>Blur Slider</h3></div>
<h1 className="fe1">Not Working</h1>
<div className="control"><input type="range" min="0" max="50" onChange={this.blurChange} value={this.state.blur} /><h3>Blur Slider</h3></div>
</div>
);
}
}

ReactDOM.render(<App />, document.getElementById("app"));

是否可以像使用 React 一样在不使用 dangerouslySetInnerHTML 的情况下更新 SVG 过滤器属性?黑客?

最佳答案

很有趣,显然是 <feGaussianBlur />必须重新安装才能正确应用更改,并且 React 不会重新安装它,而只会更新 stdDeviation属性。要修复它,请使用 key额外支持 <feGaussianBlur />这样 React 每次都会重新挂载它 this.state.blur变化:

<filter id="outline1">
<feGaussianBlur key={this.state.blur} stdDeviation={this.state.blur} />
</filter>

关于reactjs - React SVG不会在属性更新时重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com