Я обновляю атрибут фильтра 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"));
Есть ли способ обновить атрибут фильтра SVG, как вы это обычно делаете с React безиспользуя dangerouslySetInnerHTML
хак?