首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

没有自定义库的React中的谷歌地图:无法读取null的属性setState

在没有自定义库的React中,使用谷歌地图时遇到无法读取null的属性setState的错误,这是因为在组件的生命周期中,setState方法只能在组件已经被挂载到DOM中后才能被调用。如果在组件挂载之前调用setState方法,会导致无法读取null的属性的错误。

解决这个问题的方法是在组件的生命周期方法中调用setState方法。一种常见的做法是在组件的componentDidMount方法中调用setState方法,因为该方法会在组件挂载完成后立即被调用。

以下是一个示例代码,展示了如何在React中使用谷歌地图,并在组件挂载完成后调用setState方法:

代码语言:txt
复制
import React, { Component } from 'react';

class GoogleMap extends Component {
  constructor(props) {
    super(props);
    this.state = {
      map: null
    };
  }

  componentDidMount() {
    // 在组件挂载完成后调用setState方法
    this.setState({
      map: new window.google.maps.Map(this.mapRef, {
        center: { lat: 37.7749, lng: -122.4194 },
        zoom: 8
      })
    });
  }

  render() {
    return (
      <div ref={ref => (this.mapRef = ref)} style={{ width: '100%', height: '400px' }}></div>
    );
  }
}

export default GoogleMap;

在上面的代码中,我们在组件的constructor方法中初始化了map属性为null。然后,在componentDidMount方法中,通过调用setState方法来更新map属性为一个新的谷歌地图实例。最后,在render方法中,我们使用ref属性将一个div元素与this.mapRef关联起来,这样谷歌地图就可以正确地显示在页面上。

需要注意的是,上述代码中使用了window.google对象来访问谷歌地图的API。这是因为谷歌地图的API是通过在全局作用域中定义的,而不是作为React的依赖库引入的。因此,我们需要通过window对象来访问谷歌地图的API。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React 16 setState 返回 null 妙用

概述 在 React 16 为了防止不必要 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState 时返回 null 将不再触发更新。...React 16 对状态性能进行了改进,如果新状态值与其现有值相同的话,通过在 setState 返回 null 来防止来触发更新。 ?...我在下面的两个 GIF 突出显示了 React DevTools 更新: ? 没有setState 返回 null ?...从 setState 返回 null 之后 注意:我在这里换了一个深色主题,以便更容易观察到 React DOM 更新。...总结 本文介绍了在 React 16 怎样从 setState 返回 null。我在下面的 CodeSandbox 添加了 mocktail 选择程序完整代码,供你使用和 fork。

14.5K20

为什么 React16 对开发人员来说是一种福音

点击查看在线事例 自定义 DOM 属性 ? React15 会忽略任何未知 DOM 属性React 会跳过它们,因为无法识别它们。...,输出将如下所示(会显示自定义属性,并且完全不会被忽略) // React 16 output: 在 state 设置...null 避免重新渲染 有时候我们需要通过函数来判断组件状态更新是否触发重新渲染,在 React 16 ,我们可以通过调用 setState 时传入 null 来避免组件重新渲染,这也就意味着,我们可以在...与第三方 DOM 集成。 ref 是使用 React.createRef() 创建,并通过 ref 属性附加到 React 元素。...当 ref 属性用于自定义类组件时,ref 对象将已挂载组件实例作为 current 属性。 你可能不会在功能组件上使用 ref 属性,因为它们没有实例。

1.4K30
  • 小结React(三):state、props、Refs

    在事件触发setState()来修改state数据,state改变后会重新进行render()(React生命周期内容,更多可点击) 在需要对用户输入、服务器请求或者时间变化等做出响应时,使用state...React目前支持事件列表: state事件.png 还有些不常用事件这里没有具体列出,如有兴趣可查看。 2.props (1)React数据流是自上而下,从父组件流向子组件。...那如果从父组件要传递个age属性给子组件,可以继续在父组件设置age属性: 父组件设置: 子组件读取: import React from...避免了上述写法手动传递多个属性,导致代码要写得很长情况。...(2)使用场景: 控制input/video/audio,例如输入框聚焦、文本选择、媒体播放操作; 触发命令式动画 与第三方 DOM 交互,比如 ECharts、地图 API 注意:不要滥用Refs。

    7.4K842

    react面试题笔记整理(附答案)

    而replaceState 是完全替换原来状态,相当于赋值,将原来 state 替换为另一个对象,如果新状态属性减少,那么 state 中就没有这个状态了。Reactprops为什么是只读?...但是这里有个点值得关注,执行 setState 时候不一定会重新渲染。当 setState 传入 null 时,并不会触发 render。... this.setState(null)}>setState null </React.Fragement...在回调你可以使用箭头函数,但问题是每次组件渲染时都会创建一个新回调。为什么使用jsx组件没有看到使用react却需要引入react?...所谓 Pre-commit,就是说我在这个阶段其实还并没有去更新真实 DOM,不过 DOM 信息已经是可以读取了;Commit 阶段:在这一步,React 会完成真实 DOM 更新工作。

    1.2K20

    React入门级小白指北及常见问题解答

    最初使用React时候并不知道这个点,导致代码逻辑没有错误,但拿到数据始终是unfinded。...后来找了文档才知道原因是setState异步设置数据,那么自然下一条语句读取数据时是unfinded。...5.React中常见功能实现 5.1本地图引用 ‍要使用本地图片,首先得安装两个npm包: url-loader(https://www.npmjs.com/package/url-loader)...根据属性路径读取它,就能返回这个标签实例。我自己理解是,它就像 DOM 里document.getElementById(id)方法一样,只是把标签 id 属性换成了 ref 属性。...有一点例外就是 currentValue 作为 props 传递给 React 自定义组件的话,即使是对象(Object)也是可以

    1.2K120

    React-Native组件之 TabBarIOS和TabBarIOS.Item

    TabBarIOS 组件简介 目前APP内,大部分都是选项与选项之间切换,比如:微信、微博、QQ空间…,在iOS,我们可以通过TabItem类进行实现,那么,在React Native,我们可以通过...TabBarIOS.Item 常见属性 继承了View所有属性 badge:图标右上角显示红色角标 icon:给当前标签指定一个自定义图标(如果定义了 systemIcon属性 这个属性会被忽略)...:一些预定义系统图标(如果使用了此属性,标题和自定义图标都会被覆盖为系统定义值)。...} from 'react-native'; 使用 TabBarIOS 很简单,但是需要配合 TabBarIOS.Item 使用,(需要注意是我们必须给TabBarIOS设置尺寸,不然可能会造成实例化却无法看到问题...自定义高亮图标(目前只支持本地图片,如果没有设置,则会显示选中颜色图标) selectedIcon={require('image!baker')} ?

    1K100

    React入门级小白指北及常见问题解答

    最初使用React时候并不知道这个点,导致代码逻辑没有错误,但拿到数据始终是unfinded。...后来找了文档才知道原因是setState异步设置数据,那么自然下一条语句读取数据时是unfinded。...5.React中常见功能实现 5.1 本地图引用 要使用本地图片,首先得安装两个npm包: url-loader,详情点击 file-loader,详情点击 理论上来说url-loader封装了file-loader...根据属性路径读取它,就能返回这个标签实例。我自己理解是,它就像 DOM 里document.getElementById(id)方法一样,只是把标签 id 属性换成了 ref 属性。...有一点例外就是 currentValue 作为 props 传递给 React 自定义组件的话,即使是对象(Object)也是可以

    82320

    百度前端高频react面试题(持续更新)_2023-02-27

    输出(渲染)只取决于输入(属性),无副作用 视图和数据解耦分离 缺点: 无法使用 ref 无生命周期方法 无法控制组件重渲染,因为无法使用shouldComponentUpdate 方法,当组件接受到新属性时则会重渲染...所谓 Pre-commit,就是说我在这个阶段其实还并没有去更新真实 DOM,不过 DOM 信息已经是可以读取了; Commit 阶段:在这一步,React 会完成真实 DOM 更新工作。...当 ref 属性被用于一个自定义类组件时,ref 对象将接收该组件已挂载实例作为他 current。 当在父组件需要访问子组件 ref 时可使用传递 Refs 或回调 Refs。...但是这里有个点值得关注,执行 setState 时候不一定会重新渲染。当 setState 传入 null 时,并不会触发 render。...JavaScriptmap不会对为null或者undefined数据进行处理,而React.Children.mapmap可以处理React.Children为null或者undefined情况

    2.3K30

    前端react面试题总结

    为什么调用 setState 而不是直接改变 state?解答如果您尝试直接改变组件状态,React无法得知它需要重新渲染组件。通过使用setState()方法,React 可以更新组件UI。...区别 函数组件类组件是否有 this 没有 有 是否有生命周期 没有 有 是否有状态 state没有React keys 作用是什么?...() 修改状态时候 会更新组件this.forceUpdate() 强制更新组件件render之后,子组件使用到父组件状态,导致子组件props属性发生改变时候 也会触发子组件更新React和...(1)都是用于创建UI JavaScript。(2)都是快速和轻量级代码(这里指 React核心)。(3)都有基于组件架构。(4)都使用虚拟DOM。...(5)都可以放在单独HTML文件,或者放在 Webpack设置一个更复杂模块。(6)都有独立但常用路由器和状态管理

    2.5K30

    异步渲染更新

    --- 迁移遗留生命周期 {#migrating-from-legacy-lifecycles} 如果你想开始使用 React 16.3 引入新组件 API(或者如果你是维护人员,希望提前更新你...DOM 属性 注意 为了简洁起见,以下示例是使用实验性属性转换编写,但是相同迁移策略在没有情况下也适用。...这就是为什么在绝大多数情况下,将获取数据移到 componentDidMount 没有明显效果原因。 注意 一些高级用例(如:Relay )可能尝试提前获取异步数据。...更新前读取 DOM 属性 {#reading-dom-properties-before-an-update} 下面是一个组件示例,该组件在更新之前从 DOM 读取属性,以便在列表中保持滚动位置:...componentWillUpdate 用于读取 DOM 属性

    3.5K00

    React基础(5)-React组件数据-props

    那么本节就是你想要知道 Reactprops 当通过函数声明或者class自定义一个组件时,它会将JSX所接受属性(attributes)转换为一对象传递给该定义时组件 这个接收对象就是props...,不过原生HTML标签属性值都是字符串,即使是内嵌js表达式,也依然是字符串,而在React,prop属性值类型可以任何数据类型(基本数据类型(number,String,null等函数)或者对象...在函数声明自定义组件,可以通过props获取组件属性 如下所示:自定义一个Button组件,给组件添加各个属性值,渲染结果如下所示 [组件props数据.png] import React,...下更多方法,可参考官网手册PropTypes使用,也可以查看npmprop-types这个使用 出于性能考虑,在开发时候可以发现代码问题,但是放在生产坏境中就不适合了 因为它不仅增加了代码行数...(props),如果不进行该设置,该组件下定义成员私有方法(函数)将无法通过this.props访问到父组件传递过来prop值 当然,在React,规定了不能直接更改外部世界传过来prop值,这个

    6.7K00

    React 灵魂 23 问,你能答对几个?

    看 1、setState 是异步还是同步? 合成事件是异步 钩子函数是异步 原生事件是同步 setTimeout是同步 相关链接:你真的理解setState吗?...以 setState 为例,在 react 内部,每个组件(Fiber) hooks 都是以链表形式存在 memoizeState 属性: ?...如果将 setState 写在条件判断,假设条件判断不成立,没有执行里面的 setState 方法,会导致接下来所有的 setState 取值出现偏移,从而导致异常发生。...因为 Synbol 无法被序列化,所以 React 可以通过有没有 $$typeof 属性来断出当前 element 对象是从数据还是自己生成。...如果没有 $$typeof 这个属性react 会拒绝处理该元素。

    1.4K20

    React 16 新特性全解(上)

    四、自定义DOM属性 React 15:忽略未标准化html 和 svg属性 React 16:去掉了这个限制 为什么要做这个改动呢?...两个原因: 不能用自定义属性,对于非标准(proposal阶段)新属性还有其他框架(Angular)很不友好 React 15之所以可以过滤掉非标准属性,是因为他们维护了一个白名单文件(放在bundle...而随着时间增加,标准化属性越来越多,意味着要一直维护这个文件,同时这个文件也会越来越大,增加bundle体积。 所以还不如去掉这个限制。 ? 可以看到自定义属性已经生效了。...3、无需提前编译 react 15:如果你直接使用SSR,会有很多需要检查procee.env地方,但是读取在node读取process.env是很消耗时间。...五、减小了32%bundle体积 React 大小从 20.7kb(压缩后 6.9kb)降低到 5.3kb(压缩后 2.2kb) ReactDOM 大小从 141kb(压缩后 42.9kb)降低到

    1.5K20

    React Native开发之React基础

    React有个全面的认识; 熟悉JSX基本语法; 了解组件结构; 熟悉组件生命周期; 学会使用props; 学会使用state; 熟悉自定义组件; React是什么?...": "^16.6.3",//是 React 核心 "react-dom": "^16.6.3",//提供与 DOM 相关功能 "react-scripts": "2.1.1"//...callback]) 渲染一个 React 元素到由 container 提供 DOM ,并且返回组件一个 引用(reference) (或者对于 无状态组件 返回 null )。...上面代码,通过为组件指定 Click 事件回调函数,确保了只有等到真实 DOM 发生 Click 事件之后,才会读取 this.refs.[refName] 属性。...它应该返回一个对象来更新状态,或者返回null来表明新属性不需要更新任何状态。 注意,如果父组件导致了组件重新渲染,即使属性没有更新,这一方法也会被调用。

    1.9K20

    React + TypeScript 实践

    ref2 = React.useRef(null) 这两种区别在于: 第一种方式 ref1.current 是只读(read-only),并且可以传递给内置...aPromise.then(() => setState(false)) } return [isLoading, load] } 如果有大量自定义 Hook 需要处理,这里有一个方便工具方法可以处理...有几种常用规则: 在定义公共 API 时(比如编辑一个)使用 interface,这样可以方便使用者继承接口 在定义组件属性(Props)和状态(State)时,建议使用 type,因为 type约束性更强...// Error: Duplicate identifier 'Animal' type Animal = { color: string } 获取未导出 Type 某些场景下我们在引入第三方时会发现想要使用组件并没有导出我们需要组件参数类型或者返回值类型...访问时就有问题了,因为 Touch 事件 event 对象并没有 clientY 这个属性

    6.5K60
    领券