javascript – React:在render()或componentDidMount()中启动值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – React:在render()或componentDidMount()中启动值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2013字,纯文字阅读大概需要3分钟。
内容图文
我不太确定在反应组件中启动计算值的位置.所以这就是我现在正在做的事情:
render () {
const { foo } = this.props
const { bar } = this.state
const calculatedValue = bar ? foo * bar : foo
return (
<div>{calculatedValue}</div>
)
}
或者我应该在componentDidMount()中启动calculatedValue
解决方法:
这取决于您的计算值在应用程序中的变化方式.如果是一个不会改变的值,你只想在第一次渲染组件时(你可能不是),你可以在componentDidMount中计算并分配给一个属性(this.calculatedValue = …)并访问用this.calculatedValue渲染,但它不是“反应方式”.
假设您正在使用状态,这将在您的应用程序中发生变化,那么您需要将计算放在其他地方.
以下是保留计算值的一些选项:
1.在你的渲染方法中,就像你做的那样:
很简单的计算,但相信我,这认为可以增长…
render () {
const { foo } = this.props
const { bar } = this.state
const calculatedValue = bar ? foo * bar : foo
return (
<div>{calculatedValue}</div>
)
}
2.在getter方法中:
保持渲染方法的计算分开
getCalculatedValue() {
const { foo } = this.props
const { bar } = this.state
return bar ? foo * bar : foo
}
render () {
return (
<div>{ this.getCalculatedValue() }</div>
)
}
3. [ES6]具有getter属性:
只是上面选项的一个变体,但由于你没有调用方法,只是访问一个属性而你的函数正在“在表下”运行,因此更加清洁.
get calculatedValue() {
const { foo } = this.props
const { bar } = this.state
return bar ? foo * bar : foo
}
render () {
return (
<div>{ this.getCalculatedValue }</div>
)
}
4.在父组件中,使这个只显示值:
这个有点复杂,但通常对于发展项目更好.在这里,我们将您的组件分成两部分:第一部分将计算(这里您可以访问某些API或您的价值来自的任何地方),而孩子只会显示它的价值.这样,您可以将逻辑和ui保存在不同的组件中,从而提高项目中代码的重用率.将UI组件(子组件)保持在没有状态的功能组件中是一种很好的模式,但这是另一个问题.
/* A functional component. Is just like a class, but without state */
const MyUIComponent = props => <div>{ props.value }</div>
class MyLogicalComponent extends React.Component {
render(){
/* you can choose any of the options above to calculate */
const computedValue = 5 + 8;
return (
<div>
<MyUIComponent value={ computedValue } />
</div>
)
}
}
希望能帮助到你!
内容总结
以上是互联网集市为您收集整理的javascript – React:在render()或componentDidMount()中启动值?全部内容,希望文章能够帮你解决javascript – React:在render()或componentDidMount()中启动值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。