【问题标题】:React map redux state to create multiple components within a componentReact map redux state 在一个组件内创建多个组件
【发布时间】:2017-07-05 09:19:57
【问题描述】:

我正在使用react-redux-mapbox-gl 库。我有一组要映射的点,以便在 Mapbox 组件中创建多个覆盖组件。然而,在尝试映射数组时,我总是得到一个未定义的错误。我是 React/Redux 的新手,所以不确定问题是什么。

下面是我的组件:

import React from 'react';
import Mapbox from 'react-redux-mapbox-gl';

import SpotsOverlay from './SpotsOverlay'

const mapStateToProps = state => ({
  spots: state.homemap.spots
})

class HomeMap extends React.Component {

    render(){

    return (

    <Mapbox
      mapboxgl={mapboxgl}
      accessToken={mapAccessToken}
      getMap={this.getMap}
      style={this.mapStyle}
      options={this.mapOptions}
    >

      {
      this.props.spots.map(spot =>{
        return (
          <SpotsOverlay
            overlay={this.overlay}
            key={spot.id}/>
        );
      })
     }

    </Mapbox>
  );
}
}

【问题讨论】:

  • 应该是this.props.spots... 而不是props.spots.
  • @MayankShukla 我以前试过这个仍然不起作用。还有其他建议吗?
  • 您是否使用任何 api 来获取该数据??
  • 在使用map之前检查值,像这样:Array.isArray(this.props.sports) &amp;&amp; this.props.sports.map或在reducer中设置初始状态为[],它应该可以工作。
  • 无条件失败的原因是,最初 reducer 状态是 {},所以 state.homemap.spots 将是 undefined 并且当您使用 undefined 的映射时,它抛出了错误,很高兴它解决了你的问题:)

标签: reactjs react-redux mapbox-gl-js


【解决方案1】:

在返回方法之外进行映射可能会有所帮助。

class HomeMap extends React.Component {

    render(){

        let spots = [];

        if(this.props.spots) {
            spots = this.props.spots.map(spot =>{
                return (
                    <SpotsOverlay
                        overlay={this.overlay}
                        key={spot.id}/>
                );
            });
        }

        return (

            <Mapbox
                mapboxgl={mapboxgl}
                accessToken={mapAccessToken}
                getMap={this.getMap}
                style={this.mapStyle}
                options={this.mapOptions}
            >
                {spots}
            </Mapbox>
        );
    }
}

正如@MayankShukla 在他的评论中所说,这样做效果更好的原因是

最初 reducer 的状态是 {},所以 state.homemap.spots 将是未定义的,当您使用未定义的地图时

【讨论】:

  • 小建议,总是提到,你改变了什么以及为什么它会帮助大家:)
  • @MayankShukla 我不知道它为什么有帮助,我只记得当我开始使用 react 时遇到了类似的问题,这解决了它。但有一件事是它至少看起来更干净。 :)
  • 这里解释一下,看看为什么会解决错误,使用map变量应该是数组否则会报错,Link
猜你喜欢
  • 2023-03-04
  • 2023-03-23
  • 2018-07-17
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2020-06-14
  • 2020-05-05
相关资源
最近更新 更多