我正在做一个将React和传单结合起来的项目,但我必须说我在语义学方面遇到了一些困难.

由于大部分内容都是由传单直接管理的,我不知道在React组件中添加传单映射实例作为状态是否有意义.

同样的问题,当涉及到创建传单标记,因为它不返回任何东西,我没有任何东西来渲染真的.对我来说,逻辑本身似乎很模糊.

这是我开始做的.这是可行的,但我觉得我在写糟糕的代码,并错过了这个概念.

/** @jsx React.DOM */

/* DOING ALL THE REQUIRE */
var Utils = require('../core/utils.js');

var Livemap = React.createClass({
    uid: function() {
        var uid = 0;
        return function(){
            return uid++;
        };
    },
    getInitialState: function() {
        return {
            uid: this.uid()
        }
    },
    componentDidMount: function() {
        var map = L.map('map-' + this.state.uid, {
            minZoom: 2,
            maxZoom: 20,
            layers: [L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'})],
            attributionControl: false,
        });
        map.fitWorld();
        return this.setState({
            map: map
        });
    },
    render: function() {
        return (
            <div className='map' id={'map-'+this.state.uid}></div>
        );
    }
});

(function(){
    Utils.documentReady(function(){
        React.render(
            <Livemap />,
            document.body
        )
    });
})();

所以我的问题是:

  • 这个样本合法吗?
  • 你将如何处理添加标记和管理其事件的逻辑?

推荐答案

  • 你不需要自己管理独特性,即"UID".相反,可以使用getDOMNode访问组件的真实 node .传单的API支持字符串 Select 器或HtmleElement实例.
  • 传单正在管理渲染,所以map人不应该住在state.只在state中存储影响React呈现DOM元素的数据.

除此之外,请正常使用传单API,并根据需要将React组件的回调绑定到传单映射.此时React只是一个包装器.

import React from 'react';
import ReactDOM from 'react-dom';

class Livemap extends React.Component {

    componentDidMount() {
        var map = this.map = L.map(ReactDOM.findDOMNode(this), {
            minZoom: 2,
            maxZoom: 20,
            layers: [
                L.tileLayer(
                    'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                    {attribution: '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'})
            ],
            attributionControl: false,
        });

        map.on('click', this.onMapClick);
        map.fitWorld();
    }

    componentWillUnmount() {
        this.map.off('click', this.onMapClick);
        this.map = null;
    }

    onMapClick = () => {
        // Do some wonderful map things...
    }

    render() {
        return (
            <div className='map'></div>
        );
    }

}

Reactjs相关问答推荐

当我在React中使用类方法更新模型的状态时,它在严格模式下触发两次

react 表复选框不对任何操作做出react

XChaCha20-Poly1305的解密函数

如何使用Reaction Testing Library+Vitest正确更新单元测试中的输入?

在ReactJS的monaco编辑器中添加美人鱼语法

悬停轴时重新绘制自定义参照线

为什么React UseEffect挂钩在页面重新加载时运行

有没有办法在 React Router v6 中的路由匹配上运行一些逻辑/功能?

无法在 NextJS 中获取嵌套对象

PWA:注册事件侦听器不会被触发

react 本机屏幕转换

列表中的每个子项都应该有一个唯一的keyprops .在react 应用程序中

设置自定义形状的纹理

Next.js `getLayout` 函数没有被调用

如何在 React 中停止嵌套 Link 和 Button 组件的事件传播?

无法在react 中向表中添加行

如何在不使用 Axios 的情况下将图像文件从 React.js 发送到 Spring Boot Rest API?

如何在屏幕上使用相同的可重用

当状态改变时如何执行一些动作,但只针对第一次更新?

多次响应获取发送请求