【问题标题】:react matrerial ui Error: Objects are not valid as a React child If you meant to render a collection of children, use an array insteadreact material ui Error: Objects are not valid as a React child 如果你打算渲染一个子集合,请改用数组
【发布时间】:2021-08-02 01:37:33
【问题描述】:

我遇到了以下代码的错误,似乎没有解决我的问题的修复程序。

componentDidMount() {
    axios.get('http://localhost:8080/home')
      .then((response) => {
        this.setState({
          data: response.data
        });
      })
      .catch((err) => {
        console.log(err);
      });
}
来自服务器的响应:
{"data":{"count":{"monthly_blog_count":1,"total_blog_count":1,"monthly_poem_count":0,"total_poem_count":0,"monthly_song_count":0,"total_song_count":0,"monthly_graphics_count":1,"total_graphics_count":1},"latest_graphics":{"link":"ganesha.svg"},"latest_blog":{"title":"test","created":"2021-05-08T07:49:50.000Z","name":"Abhishek Banerjee"},"latest_blog_list":[{"title":"test","created":"2021-05-08T07:49:50.000Z","name":"Abhishek Banerjee"}]}}
<Poems data={data} />

这是编辑的诗歌组件,因为它不允许所有代码: 基本元素是卡片。我从诗歌组件中取出代码,因为它抱怨文本不足。我也对组件进行了原型验证。

const Poems = (props) => {
  const {
    data: count,
    'data.count.total_poem_count': totalPoemCount,
    'data.count.monthly_poem_count': monthlyPoemCount,
  } = props;

  return (
        <Card
          sx={{ height: '100%' }}
          {...props}
        >
          <Grid item>
            <Typography
              color="textPrimary"
              variant="h3"
            >
              { totalPoemCount }
            </Typography>
          </Grid>
          
          <Typography
            sx={{
              color: green[900],
              mr: 1
            }}
            variant="body2"
          >
            { monthlyPoemCount }
          </Typography>
     </card>
  );
};

编辑

输入{ data?.data?.count?.total_poem_count } 就像一个魅力。但是 proptypes 验证已经消失了。谁能建议我如何让 proptypes 也能正常工作。

【问题讨论】:

  • 显示诗歌组件的代码
  • @R.LM 贴出诗码。

标签: javascript reactjs material-ui jsx


【解决方案1】:

最佳实践是使用 axios 包获取 api。

axios.get("http://localhost:8080/home")
.then((response) => {
        this.setState({
          data: response.data
        });
      })
      .catch((err) => {
        console.log(err);
      });

向组件传递数据

<Poems data={this.state.data} />

子组件

const Poems = ({ data }) => {
const dataToRender = data?.data


  return (
        <Card
          sx={{ height: '100%' }}
          {...props}
        >
          <Grid item>
            <Typography
              color="textPrimary"
              variant="h3"
            >
              { dataToRender.count.totalPoemCount }
            </Typography>
          </Grid>
          
          <Typography
            sx={{
              color: green[900],
              mr: 1
            }}
            variant="body2"
          >
            { dataToRender.count.monthlyPoemCount }
          </Typography>
     </card>
  );
};

【讨论】:

  • 这并没有解决我的问题。道具未定义。 linter 抱怨找不到未定义的属性计数。此外,数据是在使用 const { data } = this.state; 之前从状态中提取的,否则 linter 会抱怨。服务器响应也有蛇案例属性。
  • 试试 Object.values(monthlyPoemCount)
猜你喜欢
  • 2020-12-09
  • 2023-01-17
  • 2021-06-29
  • 2023-01-25
  • 2020-01-12
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多