开发者问题收集

如何读取和修改传递给 React 函数的对象

2021-04-13
59

在我的主函数 App() 中,在 useEffect() 中,我使用一些 API 成功获取数据(名为 document 的变量)。我的数据是带有一些字段的对象,即 titletext

我通过我的函数传递这些数据,并希望不同的函数使用文档的不同部分。稍后,我成功呈现标题:

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 也可以工作

2个回答

document.text.split() 将返回一个数组。不带任何参数的 str.split() 将返回一个数组。

除非循环遍历每个项目,否则无法直接呈现数组。此外,在尝试呈现值时,请务必添加对 null | undefined 的检查。

{document?.text && document.text.split().map...>

Tom Bombadil
2021-04-13

在 @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

编辑:没过多久我就意识到我之前的记录是错误的。似乎确实是一些异步问题 - 对我来说很难理解,因为错误和结果取决于数据获取的持续时间。

DavidS1992
2021-04-13