我已经与React合作了大约6个月,而曾经打扰我的东西是重新租赁的工作方式。
下面是一个传统的组件,它具有一个输入框,并将数据发送给服务器,并将某些形式的值以及多个从未使用或很少更改的几乎静态的HTML元素一起使用。我之所以很少是因为可以在componentWillMount()
方法中的变量中构建并存储静态元素。但是要使这个问题要多一点,渲染应包含对buildComplexHTMLFromData
方法的调用。
buildComplexHTMLFromData = (data) => {
// Lot of javascript to build the boxes based on the initial or data
// that changes so rarely
// array.map.filter.find etc.
return (
<div>
//Complex HTML element 1
//Complex HTML element 2
//....
//....
//Complex HTML element n
</div>
)
}
sendDataToBackend = (event) => {
this.setState(
{ value: event.target.value },
() => this.functionThatSendsDataToBackend()
)
}
render() {
<div>
// Active input that sends data to the backend
<input
value={this.state.value}
onChange={this.sendDataToBackend}
/>
{this.buildComplexHTMLFromData()}
</div>
}
现在,在输入框上设置状态更改也将触发复杂的JavaScript的buildComplexHTMLFromData
方法。我听说React通过在DOM之间扩散到有效重新渲染来做一些聪明的事情,但无论如何都执行了此JavaScript。
sendDataToBackend
方法可以实现相同的功能,如下图所示。但是,这可以确保仅更改目标输入元素而不触摸已渲染的元素或在buildComplexHTMLFromData
方法上执行任何JavaScript。
。 buildComplexHTMLFromData = (data) => {
// Lot of javascript to build the boxes based on the initial or data
// that changes so rarely
// array.map.filter.find etc.
return (
<div>
//Complex input box 1
//Complex input box 2
//....
//....
//Complex input box n
</div>
)
}
sendDataToBackend = (event) => {
//First strategy
var element = document.getElementById("persistable-input");
element && element.value = event.target.value
//Second strategy
this.persistableInput.value = event.target.value
}
render() {
<div>
// Active input that sends data to the backend or for other forms
<input
id="persistable-input"
ref={(elem) => { this.persistableInput = elem }}
value={this.state.value}
onChange={this.props.persistedValue}
/>
{this.buildComplexHTMLFromData()}
</div>
}
我不知道我是否缺少某些东西,还是在性能上很少,但是我觉得这对复杂的组件可能会很征收。我看了有关React的和解范式的多个文章,但似乎并没有解决这个问题。
我真的很感激是否有人能向这一反应区域散发出一些启示,因为在大多数情况下,我正在寻找一些关于React的表现和解的很酷的技巧和输入。
预先感谢。
这正是shouldComponentUpdate
生命周期钩的目的。如果您知道您的组件不应总是重新渲染,则可以添加此生命周期钩以检测哪个状态正在发生变化。如果您不在乎它,则可以return false
,并且buildComplexHTMLFromData
功能永远不会运行。
编辑:
他们还公开了一个名为PureComponent
的基类,该基类在引擎盖下为您处理shouldComponentUpdate
。