javascript - 循环状态并创建多个组件

标签 javascript reactjs react-map-gl

我正在尝试在 map 上显示(车辆的)位置坐标,并使用每 3 秒获取一次的数据。每次我获取数据(具有“经度”和“纬度”属性的对象数组)时,状态都会更新,我想更新 map 上的“标记”以反射(reflect)车辆的最新位置。

我知道我正在获取数据,但标记没有显示。我的循环方式有问题吗?

class Mapbox extends Component {
  constructor(props){
    super(props)
    this.state = {
      active_vehicles: {},
    };
  }

  componentDidMount() {
    this.interval = setInterval(() => this.fetchData(), 3000);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }


  fetchData = async () => {
    let url = `${request_url}`
    const response = await fetch(url, {
      method: "GET",
      headers: {
        "Accept": "application/json",
      }
    });
    const body = await response.json()
    this.setState({ active_vehicles: body })
  }

  createMarkers = () => {
    let markers = []

    if(this.state.active_vehicles){
      for (let i = 0; i < this.state.active_vehicles.length; i++) {
        markers.push(
        <Marker latitude={this.state.active_vehicles[i]["Latitude"]} longitude={this.state.active_vehicles[i]["Longitude"]}>
          <div>x</div>
        </Marker>
        )
      }
      return markers
    }
  }

  render() {
    return (
      <ReactMapGL
        // mapbox API access token
        mapboxApiAccessToken={MAPBOX_TOKEN}
        mapStyle="mapbox://styles/mapbox/dark-v9"
        {...this.state.viewport}
        onViewportChange={(viewport) => this.setState({viewport})}>

        <div>
          {this.createMarkers()}
        </div>

      </ReactMapGL>
    );
  }
}

最佳答案

  1. 正确this.active_vehiclesthis.state.active_vehicles (OP在我发表评论后已更正)
  2. 添加key for 内的标记组件的属性循环:<Maker key={i} ...

关于javascript - 循环状态并创建多个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135614/

相关文章:

javascript - React - 更改列表中组件的顺序

javascript - 为对象内的变量设置状态

javascript - React-mapbox-gl 中的样式标记/功能?

html - ReactMapGL 上的 onHover 效果无法正确缩放

react-map-gl - 如何使用 react-map-gl 将连接线添加到 map 标记

javascript - $watch 不适用于 ng-repeat 创建的模型

javascript - jQuery UI 拖放 : clone not dropping

javascript - 覆盖 $templateCache 使其不区分大小写

reactjs - 调用 renderHook() 后 waitFor 超时

javascript - 使用 sqlite 和 Expo 从 SQL 查询中获取实际的行数组