react 父子组件的传值与方法的相互调用

一.父组件获取子组件的数据

  子组件代码:

import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
import { fromLonLat } from 'ol/proj.js';
import {defaults as defaultControls, ZoomToExtent} from 'ol/control.js';


class MapComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      map:{}
    }
  }
  // 2.dom渲染成功后进行map对象的创建
  componentDidMount() {
    let { center } = this.props;
    if (!center) {
      center = { 
        lon: 113.8,
        lat: 34.6,
      };
    }
    this.map = new Map({
      controls: defaultControls().extend([
        new ZoomToExtent({
          extent: [
            813079.7791264898, 5929220.284081122,
            848966.9639063801, 5936863.986909639
          ]
        })
      ]),
      view: new View({
        center: fromLonLat([center.lon, center.lat]),
        zoom: 5,
      }),
      layers: [
        new TileLayer({
          source: new OSM(),
        }),
      ],
      target: 'map',

    });
    //  传值给父组件
    if(this.props.getMap){
       this.props.getMap("map对象")
    }
   
  }

  render() {
    // 1.创建地图容器
    return (
      <div style={{ height: '100%' }}>
        <div id="map" className="map" style={{ height: '100%' }} />
      </div>
    );
  }
}

export default MapComponent;

 

 (1)函数传值的方式

   父组件代码:

import React, { Component } from 'react';
import Map from '../../component/map/map';
// import {defaults as defaultControls, ZoomToExtent} from 'ol/control.js';

class NavControl extends Component {
  componentDidMount() {}

  getMap = (map) => {
   console.log("子组件的传递过的数据",map)
  };

  render() {
    return (
      <div>
        <Map ref="map" center={{ lon: 113.8, lat: 34.6 }} getMap={this.getMap} />;
      </div>
    );
  }
}

export default NavControl;

说明:

(1)在父组件中首先定义一个接受子组件参数的函数

(2)在子组件中调用父组件接受参数的函数

二:通过对象来获取数据

父组件的代码:

import React, { Component } from 'react';
import Map from '../../component/map/map';
import { Button } from 'antd';
import { fromLonLat } from 'ol/proj.js';

class MapOperation extends Component {
  constructor(props) {
    super(props);
    this.state = {
      map: null,
      view: null,
    };
  }
  componentDidMount() {
    let { map } = this.refs.map;
    //   map.addNavControl()
    let layrs = map.getOverlays();
    console.log('图层信息', layrs);
    // 缩小
    var view = map.getView();
    console.log('地图', view);
    // var zoom = view.getZoom();
    this.setState({
      map,
      view,
    });
  }

  render() {
    return (
      <div>
       
        <Map ref="map" center={{ lon: 113.8, lat: 34.6 }} />;
      </div>
    );
  }
}

export default MapOperation;

 

说明:父组件中通过this.refs获得子组件的所有数据,这个前提是自定义的数据在子组件的通过this.xxxx = new Map();

(1)子组件的数据的定义

(2)父组件的使用子组件的数据

这样就可以实现父组件获取子组件的数据了。

总结:父组件传值一种是通过函数的方式传值进行父子组件的传值,另一种是通过对象来传值,其中主要是子组件获取数据或者调用父组件的函数是通过props 来获取父组件的数据,父组件是通过ref和refs来获取子组件的数据或者子组件方法的调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值