【发布时间】:2022-01-07 18:31:21
【问题描述】:
我在 GridItem 中以 widget?.component 的形式访问 availableWidgets 以迭代组件,但现在我想将 GridItem Ref 传递给小部件组件。
给我任何建议。
const availableWidgets = [
{},
{
component: <DashboardsGuide />,
id: "1"
},
{
component: <DashboardsWeather />,
id: "2"
},
{
component: <DashboardsTraining />,
id: "3"
},
];
在这里,可用的小部件包含组件,我想将父 ref.current 传递给这个小部件,但我不知道如何在迭代时将 ref 传递给它的子组件。
如果可以的话,给个有成果的建议
我曾尝试forwardRef 使其成为可能,但没有成功。
const GridItem = React.forwardRef(function GridItem(
{ className, style, children, item, widget, id, ...rest },
ref
) {
return (
<div
id={`width-height-${id}`}
className={`grid-item ${className}`}
style={style}
ref={ref}
{...rest}
>
{console.log(ref?.current?.offsetHeight, ref?.current?.offsetWidth)}
{widget?.component}
{children}
</div>
);
});
我正在使用 React Grid Layout 库。
function GridLayout({ layouts, toggle }) {
return (
<ResponsiveGridLayout
// className="layout"
layouts={layouts}
rowHeight={20}
isDraggable={toggle ? true : false}
isResizable={toggle ? true : false}
margin={[20, 20]}
onLayoutChange={(...e) => {
localStorage.setItem("layouts", JSON.stringify(e[1]));
}}
breakpoints={{ lg: 1280, md: 992, sm: 767, xs: 480, xxs: 0 }}
cols={{ lg: 24, md: 20, sm: 12, xs: 8, xxs: 4 }}
>
{layouts.lg.map((item) => (
<GridItem id={item.i} key={item.i} widget={availableWidgets[item.i]} />
))}
</ResponsiveGridLayout>
);
}
通过使用
{layouts.lg.map((item) => (
<GridItem id={item.i} key={item.i} widget={availableWidgets[item.i]} />
))}
我正在迭代小部件
【问题讨论】:
-
您对
availableWidgets对象形状有任何控制权吗?换句话说,component需要是 JSX 吗?可以是你要渲染的组件的引用吗? -
请检查我的更新代码
-
您只是想通过
GridItem将React ref 传递给div元素还是小部件组件?参考在哪里创建/生成? -
我想将 GridItem ref 传递给小部件组件.. 所以我可以访问小部件组件中的 GridItem 偏移属性
-
那么
GridItem是否需要创建 ref 才能传递给 widget 组件?