Mar*_*cin 7 javascript reactjs material-ui react-leaflet
我正在使用 React v.16.12.0 和 @MaterialUI/core v4.8.1。
我正在尝试为 React Leaflet Marker 创建自定义图标。该图标是FabMaterial-UI 中的一个组件。为此,我需要将 HTML 字符串传递给L.DivIcon (DivIcon Docs) Leaflet 组件,因此我renderToString()使用react-dom/server.
它抛出一个错误:
警告:useLayoutEffect 在服务器上不执行任何操作,因为它的效果无法编码为服务器渲染器的输出格式。这将导致初始的、非水合的 UI 与预期的 UI 之间不匹配。为了避免这种情况,useLayoutEffect 应该只在专门在客户端渲染的组件中使用。在NoSsr中 在ForwardRef(ButtonBase)中 在WithStyles(ForwardRef(ButtonBase))中 在ForwardRef(Fab)中 在WithStyles(ForwardRef(Fab))中 (at src/index.js:9)
虽然我没有使用 useLayoutEffect。
这是一个简单的例子:
import React from "react";
import ReactDOM from "react-dom";
import ReactDOMServer from 'react-dom/server';
import Fab from '@material-ui/core/Fab';
function App() {
return ReactDOMServer.renderToString(
<Fab size="small" variant="extended">
Test
</Fab>);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)
在线: https: //codesandbox.io/s/material-ui-rendertostring-tc90b
为什么会抛出这个错误?这段代码有什么问题?是否有其他方法可以从 Material-UI 组件生成 HTML 字符串,以便将其作为图标传递给 Leaflet Marker?
Mur*_*ati -2
我曾经renderToStaticMarkup渲染自定义标记。标记正在渲染,但仍然收到警告。
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { renderToStaticMarkup } from "react-dom/server";
import { divIcon } from "leaflet";
import { Map, TileLayer, Marker, Popup } from "react-leaflet";
import Fab from "@material-ui/core/Fab";
import "./styles.css";
class App extends Component {
state = {
lat: 51.505,
lng: -0.091,
zoom: 13
};
render() {
const position = [this.state.lat, this.state.lng];
const iconMarkup = renderToStaticMarkup(
<Fab size="small" variant="extended">
Test
</Fab>
);
const customMarkerIcon = divIcon({
html: iconMarkup
});
return (
<div>
<Map center={position} zoom={this.state.zoom}>
<TileLayer
attribution='&copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.osm.org/{z}/{x}/{y}.png"
/>
<Marker position={position} icon={customMarkerIcon}>
<Popup>
A pretty CSS3 popup. <br /> Easily customizable.
</Popup>
</Marker>
</Map>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)
工作代码:https://codesandbox.io/s/react-leaflet-icon-material-mx1iu
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |