如何读取和修改传递给 React 函数的对象
在我的主函数
App()
中,在
useEffect()
中,我使用一些 API 成功获取数据(名为
document
的变量)。我的数据是带有一些字段的对象,即
title
和
text
。
我通过我的函数传递这些数据,并希望不同的函数使用文档的不同部分。稍后,我成功呈现标题:
import React from 'react'
import "./Title.css"
function Title({document}) {
return (
<div className="title">
{document.title}
</div>
)
}
export default Title;
我也想呈现“文本”字段, 但 我想在换行符上拆分它
import {useState, useEffect} from 'react'
import React from 'react'
function SourceText({ document }) {
return (
<div>
{document.text.split()}
</div>
)
}
export default SourceText
这不起作用并返回错误
TypeError: document.text is undefined
这很奇怪,因为当我在 div 中仅返回
document.text
时,此对象存在。
我试图添加类似这样的内容
const [text, setText] = React.useState(null);
React.useEffect(() => {
setText(document.text)
console.log(document.text);
}, []);
但它看起来并没有将
document.text
值设置为
text
变量。我不明白的是,在添加这些代码行后,浏览器中的控制台会打印整个对象。
我是 React 和 JavaScript 的新手,我真的不明白如何修改和使用传递给函数的值。
谢谢
编辑:
我将文档从
App
传递给
TabGroup
,然后传递给
Source
,然后传递给
SourceText
。最后一个在这里:
import './Source.css';
import SourceText from './SourceText';
import Title from './Title';
function Source({document}) {
return (
<div className="source">
<Title title={document.title}/>
<SourceText document={document} />
</div>
);
}
export default Source;
正如我提到的,标题总是呈现,在
SourceText
中仅使用
{document.text
也可以工作
document.text.split()
将返回一个数组。不带任何参数的
str.split()
将返回一个数组。
除非循环遍历每个项目,否则无法直接呈现数组。此外,在尝试呈现值时,请务必添加对 null | undefined 的检查。
{document?.text && document.text.split().map...>
在 @Tom Bombadil 发帖后,我找到了解决方案
import {useState, useEffect} from 'react'
import React from 'react'
function SourceText({ document }) {
return (
<div>
{document.text && document.text.split('at').map((line) => (line))}
</div>
)
}
export default SourceText
编辑:没过多久我就意识到我之前的记录是错误的。似乎确实是一些异步问题 - 对我来说很难理解,因为错误和结果取决于数据获取的持续时间。