react-leaflet-search组件未呈现

时间:2019-09-24 01:09:23

标签: reactjs leaflet react-leaflet react-leaflet-search

当我尝试进行react-leaflet-search时,出现错误。当我尝试使用针对该错误的解决方案时,react正在编译,但组件似乎未呈现。

我尝试了他们的示例simple search。遇到相同的错误

transform: scale(1.005);

我尝试了这种解决方案(来自react-leaflet-search页面)

transform: scale(1.005) perspective(1px);

我什至尝试过:

TypeError: Cannot read property 'map' of undefined
new ReactLeafletSearch
C:/Users/project/node_modules/react-leaflet-search/lib/React-Leaflet-Search.js:106
  103 |   });
  104 |   _this.SearchInfo = null; // searched lat,lng or response from provider
  105 | 
> 106 |   _this.map = context.map || props.leaflet.map;
      | ^  107 |   return _this;
  108 | }
  109 | 

这些行绕过了“错误”,但似乎没有组件在渲染。

我的react-leaflet Map组件正在加载,缩放+/-按钮也在加载,但搜索不在。

这是我正在使用的代码 map example 当然我也在做:

const searchComponent = props => (<ReactLeafletSearch position="topleft" />);

唯一的区别是我在第31行之后添加了我的组件。

const searchComponent = withLeaflet(ReactLeafletSearch);

似乎没有任何渲染。

我期望的结果是一个搜索组件,类似于此中显示的组件 working example

2 个答案:

答案 0 :(得分:1)

要复制this示例,您需要:

安装leafletreact-leafletreact-leaflet-search

之后,您需要安装babel-polyfill,如果您使用react-leaflet v2,则应该使用withLeaflet方法包装此组件。它也记录为github issue

const ReactLeafletSearchComponent = withLeaflet(ReactLeafletSearch);

在示例的SimpleExample组件的render方法中:

export default class SimpleExample extends Component {
   ...

     render() {
        // here wrap it
        const ReactLeafletSearchComponent = withLeaflet(ReactLeafletSearch);

    return (
      <Map
        className="simpleMap"
        scrollWheelZoom={true}
        bounds={this.state.bounds}
        maxZoom={this.state.maxZoom}
        maxBounds={this.state.maxBounds}
      >
        <TileLayer
          noWrap={true}
          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        />
        <ReactLeafletSearchComponent
          customProvider={this.provider}
          position="topleft"
          inputPlaceholder="Custom placeholder"
          search={[33.100745405144245, 46.48315429687501]}
          showMarker={true}
          zoom={5}
          showPopup={true}
          popUp={this.customPopup}
          closeResultsOnClick={true}
          openSearchOnLoad={true}
          // // these searchbounds would limit results to only Turkey.
          searchBounds={[
            [33.100745405144245, 46.48315429687501],
            [44.55916341529184, 24.510498046875]
          ]}
          // providerOptions={{region: 'tr'}}

          // default provider OpenStreetMap
          // provider="BingMap"
          // providerKey="AhkdlcKxeOnNCJ1wRIPmrOXLxtEHDvuWUZhiT4GYfWgfxLthOYXs5lUMqWjQmc27"
        />
      </Map>
    );
  }
}

别忘了添加map height并导入leaflet.css

Demo

答案 1 :(得分:0)

kboul的答案帮助我解决了搜索组件无法正确呈现的问题。

    const ReactLeafletSearchComponent = withLeaflet(ReactLeafletSearch);

之后,您可以使用“ ReactLeafletSearchComponent”,该组件将呈现。

我为变量使用其他名称的东西。似乎它在某种程度上对名称敏感。 (我不完全了解多少),但是当我尝试使用“ searchComp”之类的名称时,它将无法正常工作,但是当我尝试使用“ ReactLeafletSearchComponent”时,它将可以正常工作。