老师,this.setState 已经改变了state中的数据 为什么有的不起作用了?

来源:1-2 【讨论题】对于不断推出的前端新框架,我们应该如何学习?

Dell铁粉

2021-06-14

import React, { PureComponent, useState, useRef } from 'react’
import { Mapbox, InnerMap } from ‘./style’
// import Example from './position’
import { Map, Marker, Geolocation } from ‘react-amap’;
import axios from 'axios’
import HeaderTinyPng from './header’
import LeftMenu from '…/leftMenu’
import RightMenu from '…/rightMenu’
import './position.css’
import { Button } from ‘element-react’;

class Homepage extends PureComponent {
constructor( props ){
super()
this.state= {
getDatas: [],
gdkey: ‘0d9a2cbac23306d5a86c1ade7d84d3af’,
lenarr: [],
center: { longitude: 121.061411, latitude: 31.376044 },
everPoint: [],
transDates:[],
elements:[],
}
// console.log(this.state.getDatas)
}

componentWillMount = () => {
    axios.get('http://218.4.86.196:9193/bike/bigScreen/getList?stationNo=&lockStatus=')
    .then( (data)=>{
        // console.log(data.data.data)
        let ele = data.data.data;
        let forEachData = [];
        // console.log(ele)
        const allmarker = [];
        const normarker = [];
        const faultmarler = [];
        const disconnectmarker = [];
        const initmarker = [];
        const emptypile = [];
        const fullpile = [];
        const emptywarning = [];
        const fullwarning = [];
        // const transportData = [];
        {
            ele.map((data,index)=>{
            //   console.log(data)
                const lon = data.stationLocationLong
                const lat = data.stationLocationLat
                const titleLoc = data.stationLocation
                    // forEachData.push( {lon,lat,titleLoc} )
                let lockStatus = data.lockStatus; 
                let lockStatusNum = Number(lockStatus)
               console.log(lockStatusNum)
               if( lockStatusNum >= 0 ){
                        allmarker.push( {lon,lat,titleLoc} )     
                    if( lockStatusNum === 0 ){
                        normarker.push( {lon,lat,titleLoc} )
                    } else if( lockStatusNum === 1 ) {
                        faultmarler.push( {lon,lat,titleLoc} )
                    } else if( lockStatusNum === 2 ){
                        disconnectmarker.push( {lon,lat,titleLoc} )
                    }else if( lockStatusNum === 3 ){
                        initmarker.push( {lon,lat,titleLoc} )
                    }else if( lockStatusNum === 4 ){
                        emptypile.push( {lon,lat,titleLoc} )
                    }else if( lockStatusNum === 5 ){
                        fullpile.push( {lon,lat,titleLoc} )
                    }else if( lockStatusNum === 6 ){
                        emptywarning.push( {lon,lat,titleLoc} )
                    }else if( lockStatusNum === 7 ){
                        fullwarning.push( {lon,lat,titleLoc} )
                    }
                 }   
              
                })
                
            }
            // console.log(normarker)
            const transportData = [allmarker,normarker,faultmarler,disconnectmarker,initmarker,emptypile,fullpile,emptywarning,fullwarning]
            this.setState({
                transDates : transportData
            })
            console.log(transportData)
            // console.log(allmarker)
            forEachData = allmarker
            this.setState({
                everPoint : forEachData,
               
            })
        // console.log( forEachData )
        // this.setState({
        //     getDatas : ele,
        // })
    } )
    .catch(()=>{
            alert('请求失败')
        }
    )

}
componentDidMount = () => {
    // console.log( Map )
    // console.log(window.AMapUI)
    const AMapUI = window.AMapUI;
    
}



render(){
    const Key = this.state.gdkey;
    const AMap = window.AMap
    return (
        <Mapbox>
            {/* <div style={{width:'100px',height:'200px',background:'red'}} onClick={ this.handlePositionCenter }></div> */}
            <HeaderTinyPng />
            <LeftMenu 
                transportDatatoson = { this.state.transDates } 
                handleRenderMarker = { this.handleRenderMarker }
            />
            <RightMenu />
            <InnerMap id='innerMap'>
                    <Map 
                        akay={ Key }
                        zoom={ 13 }
                        mapStyle = "amap://styles/dark"
                        center={ this.state.center }
                        // center = {[121.061411,31.376044]}
                    >
                        {
                            this.state.everPoint.map( (data,index)=>{
                                // console.log(data)
                                // console.log(AMap)
                                    return(
                                        <Marker key={index} title={data.titleLoc} position={[data.lon,data.lat] } />
                                    ) 
                                } )
                        }

{/* /}
{/
自我定位 /}
{/
<Geolocation
// 是否使用高精度定位,默认:true
enableHighAccuracy={true}
// 超过10秒后停止定位,默认:5s
timeout={10000}
// 定位按钮的停靠位置
buttonPosition=“RB”
// 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
// buttonOffset={new AMap.Pixel(60, 200)}
// 定位成功后是否自动调整地图视野到定位点
zoomToAccuracy={ true }
/> */}

            </InnerMap>
        </Mapbox>
    )
}
        //更改定位状态属性
            handlePositionCenter = () => {
                this.setState({
                    center : {longitude : 121,latitude : 31.376044}
                })
            }

            handleRenderMarker = (datas) => {
                console.log(datas)
                console.log(this.state)
                this.setState({
                    everPoint : datas
                },()=>{
                    console.log(this.state.everPoint)
                })
            }

}

export default Homepage

写回答

1回答

Dell

2021-06-21

把问题代码拆一下,我看你这么一大坨,也不知道具体的问题。是哪里不好用?

0
2
Dell
回复
Dell铁粉
这个不大可能,你要看看接受不了state的map组件是否做了处理,它是否接收到新数据会刷新
2021-07-07
共2条回复

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程