【发布时间】:2019-08-20 13:52:16
【问题描述】:
我正在通过滑块输入控件更新 SVG 过滤器属性,但它不会持续更新呈现的过滤器。
这是工作代码:https://codepen.io/dgwyer/pen/EXmqrb
如果我使用dangerouslySetInnerHTML 来设置过滤器,那么它可以工作,但是这个 hack 还不足以在生产代码中使用?
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"));
在不使用dangerouslySetInnerHTML hack 的情况下,是否可以像平常使用 React 一样更新 SVG 过滤器属性?
【问题讨论】:
标签: reactjs svg filter attributes jsx