首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >TypeError with“无法读取未定义的属性'length‘”

TypeError with“无法读取未定义的属性'length‘”
EN

Stack Overflow用户
提问于 2019-12-23 08:33:05
回答 1查看 822关注 0票数 1

在添加async function getNumbers(owner)之后,我收到以下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  71 | <div className="App">
  72 |   Messages for user: {owner}
  73 |   <h3>Numbers</h3>
> 74 |   <div>
     | ^  75 |     {state.numbers.length > 0 ? (
  76 |       state.numbers.map(number => <p key={number.to}>{number.to}</p>)
  77 |     ) : (

原因似乎是由async function getNumbers(owner)引起的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Amplify, { Auth, API, graphqlOperation } from "aws-amplify";
import React, { useEffect, useReducer, useState } from "react";

import { withAuthenticator } from "aws-amplify-react";
import { messagesByToByCreatedAt, numberByOwnerByTo } from "./graphql/queries";
import awsconfig from "./aws-exports";

import "./App.css";

Amplify.configure(awsconfig);

// Action Types
const QUERY = "QUERY";

const initialState = {
  messages: [],
  numbers: []
};

const reducer = (state, action) => {
  switch (action.type) {
    case QUERY:
      return { ...state, messages: action.messages, numbers: action.numbers };
    default:
      return state;
  }
};

function App() {
  const [owner, setOwner] = useState(null);
  const [state, dispatch] = useReducer(reducer, initialState);

  useEffect(() => {
    // Get all numbers that belong to user
    async function getNumbers(owner) {
      const ownerData = await API.graphql(
        graphqlOperation(numberByOwnerByTo, { owner: owner })
      );

      dispatch({
        type: QUERY,
        numbers: ownerData.data.numberByOwnerByTo.items
      });
    }
    getNumbers("13d8fbce-8989-4dff-bdcf-2fac8926a52d");

    // getMessages
    async function getMessages(number) {
      const messageData = await API.graphql(
        graphqlOperation(messagesByToByCreatedAt, { to: number })
      );

      dispatch({
        type: QUERY,
        messages: messageData.data.messagesByToByCreatedAt.items
      });
    }
    getMessages("4915735992273");

    // Assign logged in user to $owner
    Auth.currentAuthenticatedUser({
      bypassCache: false
    })
      .then(user => {
        setOwner(user.username);
      })
      .catch(err => console.log(err));
  }, []);

  return (
    <div className="App">
      Messages for user: {owner}
      <h3>Numbers</h3>
      <div>
        {state.numbers.length > 0 ? (
          state.numbers.map(number => <p key={number.to}>{number.to}</p>)
        ) : (
          <p>Add numbers!</p>
        )}
      </div>
      <h3>Messages</h3>
      <div>
        {state.messages.length > 0 ? (
          state.messages.map(message => (
            <p key={message.from}>{message.messageBody}</p>
          ))
        ) : (
          <p>Add messages!</p>
        )}
      </div>
    </div>
  );
}

export default withAuthenticator(App, true);

下面是我如何解决它的方法。感谢@Arun K

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(() => {
    // getMessages
    async function getData(number, owner) {
      const messageData = await API.graphql(
        graphqlOperation(messagesByToByCreatedAt, { to: number })
      );
      const ownerData = await API.graphql(
        graphqlOperation(numberByOwnerByTo, { owner: owner })
      );

      dispatch({
        type: QUERY,
        numbers: ownerData.data.numberByOwnerByTo.items,
        messages: messageData.data.messagesByToByCreatedAt.items
      });
    }
    getData("4915735992273", "13d8fbce-8989-4dff-bdcf-2fac8926a52d");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-23 08:47:32

在我看来,ownerData.data.numberByOwnerByTo.items返回的是undefined。主要的问题似乎是。你应该解决这个问题。

然后你的reducer会将undefined赋值给numbersnumbers: action.numbers

如果值不是未定义的,则可以赋值,也可以将其设置为空数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return { ...state, messages: action.messages, numbers: action.numbers || [] };

此外,状态更新两次,每次api调用后更新一次,这就是为什么在为messages状态更新呈现组件时numbersundefined的原因。

你能在获取消息和数字后进行一次状态更新吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dispatch({
  type: QUERY,
  numbers: ownerData.data.numberByOwnerByTo.items,
  messages: messageData.data.messagesByToByCreatedAt.items
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59452215

复制
相关文章
由中文地址返回点位坐标-地理编码脚本分享
“由中文地址返回点位坐标”这个过程被称为地理编码。有时候我们会有这方面的需求,比如问卷调查后受访者填的居住地为中文地址,后期需要落在地图上。之前有一个作者开发了一个XGeoCoding的工具,能够实现这一需求,不过很可惜后期停用了——所以又自食其力了一次。
Sidchen
2020/08/27
7700
由中文地址返回点位坐标-地理编码脚本分享
python-爬取地理坐标
目标网址:百度地图 使用到的技术其实是百度地图提供的开发者工具,没有暴力的东西,总体来说比较规范,唯一感觉到奇怪的是,在我进行调用接口的时候,我电脑的网老是断开,感觉好像是被所里的防火墙给整了,但是感觉不应该啊,这也不是违规操作。
火星娃统计
2020/09/15
1.8K0
python-爬取地理坐标
地理坐标系与投影坐标系的区别
1、首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为 地理坐标系统,是以经纬度为地图的存储单位的。很明显,Geographic coordinate syst em是球面坐标系统。我们要将地球上的数字化信息存放到球面坐标系统上,如何进行操作 呢?地球是一个不规则的椭球,如何将数据信息以科学的方法存放到椭球上?这必然要求 我们找到这样的一个椭球体。这样的椭球体具有特点:可以量化计算的。具有长半轴,短
用户1075292
2018/01/23
2.1K0
使用GDAL进行影像投影坐标、地理坐标、图上坐标的转换
我使用GDAL库写了四个函数分别进行投影坐标与地理坐标(经纬度)之间的转换,投影坐标和图上坐标(行列号)之间的转换。有需要的朋友可以参考。 直接上代码吧,因为代码很简单(Python版本)。
卡尔曼和玻尔兹曼谁曼
2019/01/22
8.7K0
使用GDAL进行影像投影坐标、地理坐标、图上坐标的转换
iOS小技能:地理编码(地址转坐标)
用户在高德地图官网申请Web服务API类型Key:https://lbs.amap.com/dev/
公众号iOS逆向
2022/08/22
1.4K0
iOS小技能:地理编码(地址转坐标)
GIS数据漫谈(五)— 地理坐标系统
地理坐标系通过角度测量单位(Unit)、本初子午线(PRIMEM)和基准面(DATUM)来进行定义。地理坐标系下的坐标值为经纬度,所以有时也叫经纬度坐标系。CGCS2000,2000国家大地坐标系。我们很多时候直接用WGS84的坐标来代替CGCS2000坐标。因为CGCS2000的定义与WGS84实质一样,采用的参考椭球非常接近。扁率差异引起椭球面上的纬度和高度变化最大达0.1mm。当前测量精度范围内,可以忽略这点差异。
thingjs
2022/07/27
2.2K0
GIS数据漫谈(五)— 地理坐标系统
php 计算两点地理坐标的距离
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112355.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
5370
ENVI中不含地理参考信息的栅格图像添加地理或投影坐标系
  本文介绍基于ENVI软件,对不含有任何地理参考信息的栅格遥感影像添加地理坐标系或投影坐标系等地理参考信息的方法。
疯狂学习GIS
2022/12/18
7060
ENVI中不含地理参考信息的栅格图像添加地理或投影坐标系
http返回错误状态_状态码返回0
代码里面我刚刚开始的时候使用的是HttpPost发的请求,另外一边呢,刚刚开始的时候只有一个get请求在那等着呢。
全栈程序员站长
2022/11/01
2.5K0
http返回错误状态_状态码返回0
持续搞【附近】---长连接坐标流和“地理围栏”(五)
我们经过【附近】系列的二、三、四篇章后,已经基本了解了市面上用于解决LBS问题的几种常见方案和做法,当然除了PostGre外... ...那个有兴趣的哥们可以考虑补一篇PostGre版本直接投稿。实际上前面的思路是很简单的,算是循序渐进类型的,从MySQL到MongoDB再到ES,大概就是从GeoHASH到Google S2再到R树们。我没有在文章里显式地说这些但是背后就是这些,往深处地挖掘全靠诸位自己了~
老李秀
2019/11/13
9920
持续搞【附近】---长连接坐标流和“地理围栏”(五)
如何利用Python进行地理坐标系统的转换?
本文主要讲述地理坐标系统的原理以及怎么利用Python进行地理坐标系统转换,内容包含以下几块:
朱卫军 AI Python
2022/04/03
1.7K0
如何利用Python进行地理坐标系统的转换?
ArcGIS矢量图层投影与地理坐标系转为投影坐标系——ArcMap
  首先,地理坐标系与投影坐标系最简单的区别就是,地理坐标系用经度、纬度作为空间衡量指标,而投影坐标系用米、千米等长度单位作为空间衡量指标。
疯狂学习GIS
2021/07/22
4.2K0
PHPCMS进入后台返回500错误
我使用的是北京息壤空间,安装完PHPCMS,一进入后台就返回500错误。 解决办法:修改配置文件 /caches/configs/system.php 将 'session_storage' => 'mysql'中的mysql改成files 解释
李维亮
2021/07/09
2K0
HarmonyOS实战—滑动事件的坐标和返回值
1. 滑动事件获取手指位置 滑动事件的三个动作: [在这里插入图片描述] 获取手指的位置就涉及到坐标的概念,通过获取到 x、y、z就可以缺任意一个点的位置 [在这里插入图片描述] 手机中的坐标: [在这里插入图片描述] 除了 x、y轴,还有z轴,在鸿蒙手机当中,完整的坐标如下,是一个立体的三维体系,但平时z轴用的非常少,一般情况只需考虑x、y轴就行了。 [在这里插入图片描述] 结合滑动事件的三个动作和坐标来分析滑动 [在这里插入图片描述] [在这里插入图片描述] [在这里插入图片描述] 2. 获取按下时手指
兮动人
2021/08/23
1.1K0
HarmonyOS实战—滑动事件的坐标和返回值
GPS坐标转换成百度坐标-如何解析json返回值
一、背景 公司碰到了一个数据迁移业务,就是把客户平台的GPS坐标迁移到自己平台,自己平台使用的是百度坐标,这就需要转换了,我是将客户公司的gps经纬度字段以及主键id导出为csv文件,这个csv文件每行三个字段,写一个脚本读取csv文件,根据每行拿到的GPS经纬度请求百度坐标转换接口,获取返回的百度经纬度,生成一个每行五个字段的csv文件,即(id,GPS经度,GPS纬度,百度经度,百度纬度)五个字段,将生成的csv文件导入自己平台数据库生成临时文件,写sql刷新自己的数据的百度经纬度字段。
jiankang666
2022/05/12
9220
【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )
大地坐标系(Geodetic Coordinate System)是一种用于 表示地球上位置的坐标系统,考虑了地球的形状和尺寸 ;
韩曙亮
2023/10/11
7.8K0
【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )
rails -help
rails new APP_PATH [选项] //APP_PATH项目名称
不知雨
2018/11/13
2.6K0
C - Rails
C - Rails C - Rails #include<cstdio> #include<stack> #include<cstring> using namespace std; int a[1010]; int main() { int n; while (~scanf("%d",&n) && n) { while (1) { stack<int> s; scanf("%d",&a[0]); if (!a[0]) { puts(""); brea
杨鹏伟
2020/09/11
6820
点击加载更多

相似问题

返回不正确坐标的OSMNX地理编码器

29

Rails地理编码器附近

12

Rails地理编码器属性

31

Rails地理编码器函数

11

地理编码器错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文