只需按一次按钮就可以使地图居中,而不会在其他道具/状态发生变化时再次按住

时间:2016-06-06 02:30:51

标签: javascript reactjs

我有一个按钮,应该将地图置于当前地理位置的中心,但只有一次,当点击按钮时。

地图上的位置居中一次后(地图组件处理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") ) ,该组件在渲染后也不会再次渲染。

但这感觉就像一个糟糕的黑客。

有什么想法吗?

0 个答案:

没有答案