我有一个按钮,应该将地图置于当前地理位置的中心,但只有一次,当点击按钮时。
地图上的位置居中一次后(地图组件处理componentDidUpdate
)
class MyComponent extends React.Component {
onCenter() {
this.setState({center: this.props.geolocation})
}
shouldComponentUpdate(nextProps, nextState) {
return (nextProps.items !== this.props.items
|| nextState.center != this.state.center) {
}
render() {
<div>
<Button onClick={this.center}/>
<Map center={this.state.center} items={this.props.item}/>
</div>
}
}
单击该按钮将触发render
,地图将以作为道具传递的地理位置为中心。
但是,当items
更改时,地图也会再次居中this.state.center
,这是不可取的(用户可能已经移动了地图)。
我想要清除state.center
componentDidUpdate
中的componentDidUpdate() {
if (this.state.center) {
this.setState({center:null})
}
}
:
shouldComponentUpdate
并停止递归渲染循环,扩展shouldComponentUpdate(nextProps, nextState) {
return (nextProps.items !== this.props.items
|| (nextState.center != this.state.center && nextState.center)) {
}
}
state.center
因此,即使在render
调用之后立即更改了class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableview.delegate = self
self.tableview.backgroundColor = UIColor.whiteColor()
self.tableView.registerNib(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "myIdentifier")
)
,该组件在渲染后也不会再次渲染。
但这感觉就像一个糟糕的黑客。
有什么想法吗?