ReactJS 访问从其他组件传递过来的 JSON 对象

Posted

技术标签:

【中文标题】ReactJS 访问从其他组件传递过来的 JSON 对象【英文标题】:ReactJS access JSON object passed from other component 【发布时间】:2018-03-14 19:39:27 【问题描述】:

我是 ReactJs 的新手,有这个问题,现在我觉得有点难以理解。

我有一个组件调用检索 XML 对象,这个 XML 对象稍后被解析为 JSON 对象,然后传递给其他组件以便对其进行一些排序。 现在我被卡住了,无法正确访问我的第二个组件上的 JSON。

当我尝试执行 this.props.files.map - 它说地图未定义。

这是我传递属性的父组件渲染方法:

render() 
    return (
        <div>

            <List files=this.convertToJson()/>

        </div>
    )

我收到的 JSON 如下所示:

[ 
"$": 
  "date": "",
  "description": "",
  "name": "",
  "size": "107829",
  "type": "pdf"

, 
"$": 
  "date": "",
  "description": "",
  "name": "",
  "size": "682015",
  "type": "pdf"
  

]

我应该如何编写我的第二个组件来访问此 JSON 数据并稍后显示所有属性,我想对其进行迭代并访问所有属性。

this.props.files.map(function($) 
          return <li key=$>$</li>
        )

这给了我一个错误 files.map is undefined.

我对此很陌生,所以所有帮助都会很有用。

这里是 this.convertToJson() 请求的代码,如果我在控制台记录它 - 它看起来像上面的 JSON。

convertToJson = () => 
return JSON.stringify(this.state.data)

【问题讨论】:

在映射文件之前,尝试console.log并检查文件是否未定义。 你能把this.convertToJson()的代码贴出来吗? 除了@mersocarlin 尝试console.log( typeof this.props.files ) 以查看files 是否实际上是一个数组。如果不是,map 将不起作用。 您可能还需要在第二个组件中使用defaultPropsthis.props.files 默认设置为空数组。 @Chase this.convertToJson() 这样做:返回 JSON.stringify(this.state.data) 【参考方案1】:

我认为问题实际上可能出在this.convertToJson()

您需要将 JSON 对象解析为 javascript 对象,以便按照您建议的方式对其进行迭代。

看看这个例子,它似乎工作正常。

// This is just mocking your JSON object
const json = JSON.stringify([
"$": 
  "date": "",
  "description": "",
  "name": "",
  "size": "107829",
  "type": "pdf"

, 
"$": 
  "date": "",
  "description": "",
  "name": "",
  "size": "682015",
  "type": "pdf"
  

]);
// This is what you care about
const obj = JSON.parse(json);

obj.map(o => 
// You need to get o.$ to get the actual object
	console.log(o.$)
);

同样为了将组件的所有对象属性作为道具传递,您可能需要扩展运算符&lt;li ...o.$&gt;$&lt;/li&gt;

希望对你有帮助

【讨论】:

当我尝试在我的代码中使用您的代码时,我收到此错误:obj.map 不是函数。我正在这样做 cont json = JSON.stringify(this.state.data) 稍后使用你的方式。如果我在此状态下控制台记录 json - 它会打印所有整个对象,如果我在解析后尝试控制台记录它,我会得到无限的 [object object] JSON.stringify 只是在模拟 JSON,您不需要对 JSON 代码进行字符串化,只需解析它即可。如果您不需要将其设为 JSON,请尝试在 this.site.data 上使用 .map 关键是它一开始不是 JSON,而是我收到的 XML。有人告诉我将其字符串化以使其成为 JSON,然后对其进行解析,但它不起作用。

以上是关于ReactJS 访问从其他组件传递过来的 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将变量从 ReactJS 传递到 CSS 样式表?

Reactjs 入门基础

Reactjs - 将状态值从一个组件传递到另一个组件

如何使用 React js 中的上下文将函数从 FUNCTIONAL 传递给 CLASS 组件并在渲染之外(没有 prop)访问它?

如何将服务器端渲染中的数据从节点传递给reactjs组件

ReactJS:从 rails 传递参数以将路由器反应到组件