最近看了mobx的相关知识,对computed属性十分喜欢。
想起在日常的项目开发中,react经常需要在render函数的开始部分进行一些props属性的计算,再将计算值用于渲染。一般会有以下画面:
1 2 3 4 5 6 7
| class User extends Component { render() { const { firstName, secondName } = this.props; const fullName = firstName + secondName; return <div>{fullName}</div> } }
|
当业务逻辑复杂时可能会造成render函数十分的臃肿。也许我们会进行这样的优化:
1 2 3 4 5 6 7 8 9
| class User extends Component { getFullName = () => { const { firstName, secondName } = this.props; return firstName + secondName; } render() { return <div>{this.getFullName()}</div> } }
|
但是我们实质上寻求的是一种computed的属性,将其封装成函数只是一种曲线救国的手段。
直到我在看frontend master的过程中,才发现原来可以使用class的get属性:
1 2 3 4 5 6 7 8 9
| class User extends Component { get fullName() { const { firstName, secondName } = this.props; return firstName + secondName; } render() { return <div>{this.fullName}</div> } }
|
总结:
使用get属性实现computed的功能可以减少render函数的臃肿。