You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-grid-layout报错:Layout属性需为对象却接收数组如何解决?

问题原因

你使用的是react-grid-layout的响应式组件Responsive,该组件要求layouts属性为以响应式断点为键、对应断点布局数组为值的对象,你直接传入了一维布局数组,因此触发类型校验报错。

解决方案

提供两种可选修复方案:

方案1:不需要响应式布局,改用基础GridLayout组件

修改代码如下:

import React from "react";
// 引入基础GridLayout而非Responsive
import { GridLayout, WidthProvider } from "react-grid-layout";
import NewvsReturnVisitors from "./newvsreturnvisitors";
import ReactDOM from "react-dom";
import "./styles/styles.css";

const e = React.createElement;
const Grid = WidthProvider(GridLayout);

function App() {
  // 布局数组可以保留原有结构
  const layout = [
    { i: "1", x: 0, y: 0, w: 2, h: 1, minW: 2, minH: 1 },
    // 注意:现有组件仅渲染了key=1的元素,无用的布局项建议删除
    // { i: "2", x: 10, y: 0, w: 2, h: 1, minW: 2, minH: 1 }
  ];

  return (
    {/* 基础组件的布局属性为单数layout,直接传数组即可 */}
    <Grid
      layout={layout}
      cols={12} // 可自定义总列数
      rowHeight={30} // 可自定义行高
    >
      <div key="1">
        <NewvsReturnVisitors />
      </div>
    </Grid>
  );
}

ReactDOM.render(e(App), document.getElementById("root"));

方案2:保留响应式能力,调整layouts结构为符合要求的对象格式

修改代码如下:

import React from "react";
import { Responsive, WidthProvider } from "react-grid-layout";
import NewvsReturnVisitors from "./newvsreturnvisitors";
import ReactDOM from "react-dom";
import "./styles/styles.css";

const e = React.createElement;
const ResponsiveGridLayout = WidthProvider(Responsive);

function App() {
  // 调整layouts为断点映射对象,可自定义断点及对应布局
  const layouts = {
    lg: [ // 大屏幕断点布局
      { i: "1", x: 0, y: 0, w: 2, h: 1, minW: 2, minH: 1 },
    ],
    md: [ // 中等屏幕断点布局
      { i: "1", x: 0, y: 0, w: 1, h: 1, minW: 1, minH: 1 },
    ],
    sm: [ // 小屏幕断点布局
      { i: "1", x: 0, y: 0, w: 1, h: 1, minW: 1, minH: 1 },
    ]
  };

  return (
    <ResponsiveGridLayout
      layouts={layouts}
      breakpoints={{lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0}} // 自定义断点阈值
      cols={{lg: 12, md: 10, sm: 6, xs: 4, xxs: 2}} // 各断点下总列数
    >
      <div key="1">
        <NewvsReturnVisitors />
      </div>
    </ResponsiveGridLayout>
  );
}

ReactDOM.render(e(App), document.getElementById("root"));

内容的提问来源于stack exchange,提问作者yongchang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:57:03