React js:无法将数组中的第一个对象作为道具发送

2024-01-20

我正在尝试构建一个小型 React.js 应用程序,我的组件结构如下所示:

MainComponent
    - CategoryList
        -Category
    - ItemsList 
        -Item

我的 MainContent 组件对其状态数据执行 ajax 请求componentDidRender:它返回这个对象:

data:[
Object[0]
 -name
 -items[]
,
Object[1],
Object[2]
]

现在,我希望我的 CategoryList 按名称写出所有类别,这工作得很好,但我也想打印出所选类别的项目。这是我的 ItemsList 组件:

 var ItemsList = React.createClass({
    render:function(){

         var itemNodes = this.props.category.items.map(function(item){
            return (
                <Item name={item.name} />
            );
        });

        return(
            <div className="itemList">
            {itemNodes}
            </div>
        );
    }
});

这就是我从父组件传递“类别”属性的方式

<ItemsList category={this.state.data[0]} />

我收到一条错误消息“无法读取未定义的属性项”,这意味着类别属性从未被分配。我知道 this.state.data 包含一个对象数组,所以我在这里看不到错误。

我做错了什么?

编辑:根据请求,这是我的主要组件:

var MainComponent = React.createClass({
    getInitialState:function(){
        return {data: []};
    },
    componentDidMount:function(){
        $.ajax({
            type:'get',
            url: '/categories',
            dataType: 'json',
            success:function(data){
                this.setState({data: data});
            }.bind(this)

        });
    },
    render: function(){
        return (
        <div className="row">
            <div className="col-md-6">
                <CategoryList categories={this.state.data} />
            </div>
            <div className="col-md-6">
            <ItemsList category={this.state.data[0]} />
            </div>
        </div>

        );
    }
});

您的主要组件使用空数组初始化状态data。渲染总是会失败,因为没有this.state.data[0].

人们可能会回答说 ajax 请求将为该状态属性提供值data(假设您的网络服务提供了一个有效的数组)。However,这仅在从服务器收到响应后发生,而在第一次渲染后不会发生。

如果信息立即可用,人们可以setState关于方法componentWillMount https://reactjs.org/docs/react-component.html#componentwillmount或组件构造函数,以避免触发第二次渲染:

componentWillMount() 在安装发生之前立即调用。它 在 render() 之前调用,因此在中同步设置状态 该方法不会触发重新渲染。避免引入任何 此方法中的副作用或订阅。

在这种情况下,由于我们正在等待远程信息,React文档仍然建议使用componentDidMount https://reactjs.org/docs/react-component.html#componentdidmount,也在这里使用:

组件安装完成后立即调用 componentDidMount() 安装。需要 DOM 节点的初始化应该放在此处。如果你 需要从远程端点加载数据,这是一个好地方 实例化网络请求。在此方法中设置状态将 触发重新渲染。

因此,组件的 render 方法必须能够处理缺失的状态变量。有多种方法可以解决这个问题,但要防止嵌套元素被渲染,直到我们有data是最简单的方法。通过一些附加逻辑,应用程序可以通知用户特定组件正在加载。

render() {
    return (
    <div className="row">
        <div className="col-md-6">
            <CategoryList categories={this.state.data} />
        </div>
        <div className="col-md-6">
          {this.state.data.length > 0 &&
            <ItemsList category={this.state.data[0]} />
          }
        </div>
    </div>
    );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React js:无法将数组中的第一个对象作为道具发送 的相关文章

  • 如何使用 java/vb 脚本调用自定义 ActiveX dll 中的方法

    我使用 VB6 创建了一个 ActiveX dll 并使用打包和部署向导将其打包 生成了一个 cab 文件和一个演示 HTML 页面 此 ActiveX dll 包含一个 simgle 方法 该方法返回字符串且不接受任何参数 我遇到的麻烦是
  • javascript获取上周的第一天和最后一天[重复]

    这个问题在这里已经有答案了 我想用 javascript 获取上周的第一天 星期一 和最后一天 星期日 我已经检查过其他主题 但它不起作用 我还需要处理前一周是否是两个不同的月份 我正在使用此代码 但最后一个星期日是 06 03 2014
  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • npm 脚本:node-sass 不监视部分 sass 文件

    我有这个项目结构 src assets css sass main scss variables scss 我正在尝试编写一个 npm 脚本 该脚本将监视我的所有 scss 文件 包括部分文件 中的更改 然后仅编译我的 main scss
  • 一个文本区域中的文本应复制到另一个文本区域,并且应使用 JavaScript 单击按钮清除原始文本区域

    我已经完成了以下代码 它显示两个文本区域 其中一个文本区域中的文本通过使用 javascript 单击按钮复制到另一个文本区域
  • Jquery 动画与 CSS 浮动

    我的代码有问题 宽度似乎可以工作 但浮动没有 这里是 这是一个例子 http jsfiddle net v82ck http jsfiddle net v82ck 问题 悬停时菜单上的浮动属性不会改变 我希望每个菜单元素下方的线在悬停该菜单
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 用于客户端存储和服务器端同步的javascript库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我将数据存储在客户端数据库中 并在后台自动将数据库同
  • 如何在 svelte 中制作搜索过滤器

    我有两个组件在组件树中距离很远 我对如何在两者之间进行通信存有疑问 我有搜索组件 listItems 和商店 商店 svelte
  • 如何检查摘要周期是否稳定(又名“Angular 完成编译了吗?”)

    tl dr 最初的问题是 如何在每个摘要周期触发回调 但潜在的问题更有趣 因为这回答了两个问题 所以我继续修改了标题 Context 在解决了所有依赖项 nginclude API 调用等之后 我试图控制 Angular 何时完成 HTML
  • ReactJs - 是否可以根据组件树的状态设置 url 或查询字符串

    我有一个组件 其中有多个嵌套组件 特别是选项卡 药丸等 任何时候都无法看到所有组件 我希望能够根据 URL 参数 或 URL 设置它们的默认状态 属性 但我不清楚如何在 React 中实现这一点 例如 我有一个带有两个选项卡的组件 引导程序
  • React + 路由器 + Google 标签管理器

    我花了一些时间在 Quickcypher com 上开发 MVP 我想开始进行一些分析 它对于跟踪总访问量非常有用 但是当我尝试跟踪使用 React Router 的网站上的不同 URL 时 情况却出问题了 我的方法是这样的 设置一个在某些
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • 截断段落前 100 个字符并隐藏段落的其余内容,以通过更多/更少链接显示/隐藏其余内容

    我有一个超过 500 个字符的段落 我只想获取最初的 100 个字符并隐藏其余部分 我还想在 100 个字符旁边插入 更多 链接 单击更多链接时 整个段落应显示并编辑文本 更多 到 更少 单击 更少 时 它应切换行为 段落是动态生成的 我无

随机推荐

  • 为 Mac 编译 stasm

    我正在尝试在我的 mac 上构建 stasm 库 并希望将其移植到 iphone 上 斯塔姆下载 http www milbo users sonic net stasm download html http www milbo users
  • 使用 Eclipse Juno Java EE 进行 jQuery 自动补全

    我已经阅读了一些关于如何为 Eclipse 启用 jQuery 特别是自动完成 支持的日期信息 使用 Aptana 或其他插件 我尝试过 Aptana 3 版本插件 但除了问题之外什么也没得到 有人可以解释如何实现这一目标吗 也许现在 Ap
  • PageControl 禁用选项卡上的文本 - 灰色文本

    我正在寻找 我认为 可以在 TPageControl 组件的 OnDrawTab 事件中使用的 Windows API 以在我选择的选项卡上显示灰色文本 我过去曾经这样做过 根据记忆 这就是我所做的 在 OnDrawTab 事件中 不幸的是
  • 有没有办法对 Firebase 用户创建和/或密码重置进行电子邮件确认?

    问题说明了一切 在 Firebase 中 当用户创建帐户时如何确认电子邮件 或者通过电子邮件重置密码 我可以更广泛地问 有什么方法可以从 Firebase 发送电子邮件吗 例如 通知等 这不是您通常在客户端执行的操作 Update 请注意
  • 在 Visual Studio 2010 中更改文本光标/插入符号

    我不小心将 Visual Studio 2010 中的文本光标 插入符号从一行更改为带有突出显示整个字符的框的光标 但不知道如何将其更改回来 谁能告诉我怎么做 谢谢 按插入键
  • 如何将可观察集合写入txt文件?

    将可观察集合写入 txt 文件的最佳方法是什么 我目前有以下内容 public ObservableCollection
  • pytqt图形线的鼠标坐标

    每当我将鼠标移动到图表顶部时 我都试图获取随机函数图的 x y 值 我正在使用 pyqtgraph SignalProxy 并将其连接到回调 mousedMoved 我收到此错误 NameError 未定义全局名称 mouseMoved 这
  • 在 Play 2.x 中覆盖 WebJar 资源

    只是想知道 是否有一种方法可以在一个文件中覆盖某些资产 确切地说是 JS 和 LESS 文件WebJars http www webjars org 资产与位于app assets 目录 说吧 我有一个引导程序 3 1 1 webjar h
  • 将 Matplotlib 图形保存为全屏图像

    我正在使用 Pandas 和 MatPlotLib 构建一个小型图形实用程序来解析工作机器中的数据和输出图形 当我使用输出图表时 plt show 我最终得到了一个不清晰的图像 其中的图例和标签就像这样相互排斥 However expand
  • 无法使用 pip 安装 Python 成像库

    尝试使用 PIP 安装 Python Imaging Library PIL 时 安装失败并出现以下错误 SyntaxError invalid syntax Complete output from command python setu
  • 没有找到类“androidx.core.widget.DrawerLayout”

    使用 Android Studio 菜单选项 Refactor gt Refactor to Androidx 迁移到 Androidx 包后 我的 build gradle 看起来像 implementation androidx app
  • facebook graph api 和 php sdk,删除事件!

    在我的一生中 我找不到一种方法来删除 取消或移除我使用 FB PHP SDK 和 Graph API 创建和更新的 Facebook 事件 我已经尝试了 facebook 文档和堆栈溢出中找到的每一个排列 以下是我在探索中发现的一些线索 h
  • 适合初学者的松耦合和面向对象实践

    保持类松散耦合是编写易于理解 修改和调试的代码的一个重要方面 我明白了 然而 作为一个新手 几乎任何时候我都很难超越最简单的例子 我或多或少地了解如何将字符串 整数和简单数据类型封装在它们自己的类中 然而 当我开始处理富文本格式等信息时 事
  • 在Linux上安装特定的adb版本

    我想使用特定的 adb 版本来连接设备 为了连接外部模拟器 我尝试使用adb connect localhost 5555 我得到这个结果 adb adb server version 36 doesn t match this clien
  • 如何在 Asp.Net Core 2.2 中禁用/启用运行时身份验证?

    网站默认只能匿名访问 管理员有一个按钮可以将站点切换到维护模式 这应该使用内置的 Cookie 身份验证启用授权 在数据库中稍微翻转一下 与本文无关 为了实现这一点 我首先配置了 cookie 身份验证 在startup cs中 publi
  • 如何在 MVC 3 中的 PartialView 加载上执行 JavaScript 函数

    code public ActionResult mapPartial DataTable dt string strEvents foreach DataRow row in dt Rows strEvents row Lat ToStr
  • dijit.byId 不适用于 IE8 和 dojo.addOnLoad

    当我使用 IE8 加载此脚本时 出现异常Object does not support this property or method 但它适用于其他浏览器 我用的是dijit 1 3 1 我不明白 dojo addOnLoad init
  • 如何将使用事务的代码包装在事务中然后回滚?

    我正在设置我的集成测试设备 我正在使用beforeEach and afterEach挂钩将每个测试包装在回滚的事务中 以便测试不会相互影响 一个简化的例子可能是这样的 const repository require library de
  • 如何从左到右解压元组?

    有没有一种干净 简单的方法来从左到右解压右侧的Python元组 例如对于 j 1 2 3 4 5 6 7 1 2 3 4 5 6 7 v b n j 4 7 我可以修改切片符号以便v j 6 b j 5 n j 4 我意识到我可以只订购左侧
  • React js:无法将数组中的第一个对象作为道具发送

    我正在尝试构建一个小型 React js 应用程序 我的组件结构如下所示 MainComponent CategoryList Category ItemsList Item 我的 MainContent 组件对其状态数据执行 ajax 请