Ser*_*rev 2 javascript reactjs
我编写了一个React组件,该组件呈现评级并用星标对其进行可视化。但是我必须为此使用危险的SetInnerHTML。我该如何重写具有更好代码风格的组件,而又不必危险地设置SetInnerHTML?感谢您的任何帮助。
export default class BookRating extends React.Component {
renderStars = () => {
let result = '';
for(let i=1; i<=5; i++) {
this.props.rating >= i
? result += '<div class="fa fa-star checked"></div>'
: result += '<div class="fa fa-star"></div>'
}
return result;
}
render () {
return (
<div className="rating" dangerouslySetInnerHTML={{ __html: this.renderStars() }} />
);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用数组而不是字符串来呈现多个元素:
export default class BookRating extends React.Component {
renderStars = () => {
let result = [];
for(let i=1; i<=5; i++) {
this.props.rating >= i
? result.push(<div key={i} class="fa fa-star checked"></div>)
: result.push(<div key={i} class="fa fa-star"></div>'
}
return result;
}
render () {
return (
<div className="rating">{this.renderStars()}</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
正如Quentin和Emile所指出的,您可以在一行中编写此函数,如下所示:
renderStars = () => Array(5).fill(0).map(_, i => <div className={`fa fa-star${this.props.rating > i ? ' checked' : ''}`}/>)
Run Code Online (Sandbox Code Playgroud)