如何将数据映射到反应组件?

Posted

技术标签:

【中文标题】如何将数据映射到反应组件?【英文标题】:How to map data to react component? 【发布时间】:2022-01-23 07:06:21 【问题描述】:

我有从后端返回的数据,现在我正在尝试将其映射到反应组件,该组件抛出错误Cannot read property of null 在 div 或卡中打印键的正确方法是什么,我还附加了数据

index.js

import React,  Component  from 'react';
import './app.css';
import ReactImage from './react.png';
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
import IconButton from '@mui/material/IconButton';
import MenuIcon from '@mui/icons-material/Menu';
import Paper from '@mui/material/Paper';
import Grid from '@mui/material/Grid';
import  styled  from '@mui/material/styles';

export default class JOB_DESC extends Component 
  state =  data: null ;

  async componentDidMount() 
    try 
      const response = await fetch('/api/getUsername');
      const data = await response.json();
      this.setState( data: data );
     catch (e) 
      if (e.name != "AbortError") this.setState( error: e.message );
    
  

  render() 
    const data = this.state.data;
    console.log("DATA", data);
    return (
      <Box sx= flexGrow: 1 >
        <AppBar position="static">
          <Toolbar>
            <IconButton
              size="large"
              edge="start"
              color="inherit"
              aria-label="menu"
              sx= mr: 2  >
              <MenuIcon />
            </IconButton>
            <Typography variant="h6" component="div" sx= flexGrow: 1 >
              Job.com
            </Typography>
          </Toolbar>
        </AppBar>
        <div style= padding: 20 >
          <Grid container spacing=4>
            <Grid item xs=12>
                <p>`data["User Account"]`</p>
                <p>`data["User Location"]`</p>
                <p> `data["Company Name"]`</p>
            </Grid>
          </Grid>
        </div>
      </Box>
    );
  

数据

 ‘User Account': Admin’,
‘User Location': ': New York, NY',
 'Company Name': ': Millennium’ 

【问题讨论】:

你看到data打印在浏览器控制台了吗? data 状态值最初为 null,因此在挂载和初始渲染时,它试图读取 null 的那些属性。您必须处理这样一个事实,即数据需要一些时间来加载,因为它是异步获取的,因此呈现加载微调器或消息,直到 data 不再为空 @tromgy 是的,它正在浏览器控制台中打印 正如 Jayce444 所说。 render() 方法发生在 componentDidMount 函数之前。这就是你得到错误的原因。试试 data&&.... 【参考方案1】:

看起来当你的组件被渲染时,数据仍然是空的,因为你已经将它设置为空。所以尝试索引 null 会给你Cannot read property of null

您想要做的是用一个条件包装您的组件,以检查数据在呈现时是否存在。

 data && (
    <div style= padding: 20 >
        <Grid container spacing=4>
            <Grid item xs=12>
                <p>`data["User Account"]`</p>
                <p>`data["User Location"]`</p>
                <p> `data["Company Name"]`</p>
            </Grid>
        </Grid>
    </div>
)

【讨论】:

以上是关于如何将数据映射到反应组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有正确类型的反应组件映射[重复]

如何将数据从反应组件传递到 Apollo graphql 查询?

如何将我的 JSON 数据映射到 Angular 组件 .HTML 表

点击后如何获取组件的ID - 反应

如何将降价文件加载到反应组件中?

如何将对象数组文件访问到反应组件中?