Javascript 定义了列数的Reactjs网格布局
如何使用具有以下格式的javascript实现网格/卡片布局:Javascript 定义了列数的Reactjs网格布局,javascript,arrays,reactjs,layout,grid,Javascript,Arrays,Reactjs,Layout,Grid,如何使用具有以下格式的javascript实现网格/卡片布局: <div class='x'> <div class='y'></div> <div class='y'></div> <div class='y'></div> </div> <div class='x'> <div class='y'></div> <div class='
<div class='x'>
<div class='y'></div>
<div class='y'></div>
<div class='y'></div>
</div>
<div class='x'>
<div class='y'></div>
<div class='y'></div>
<div class='y'></div>
</div>
列容器的项通过映射到类似于FileList组件中的数组来检索:
data.files.map(file => (
<FileItem
key={file.id}
file={file}
refresh={() => refetch()}
/>
))
data.files.map(文件=>(
refetch()}
/>
))
我可以在FileItem组件中传入
。
我只是不知道如何实现行容器的逻辑
基本上我想要这个:
<div class='x'>
<div class='y'>FileItem 1</div>
<div class='y'>FileItem 2</div>
<div class='y'>FileItem 3</div>
</div>
<div class='x'>
<div class='y'>FileItem 4</div>
<div class='y'>FileItem 5</div>
<div class='y'>FileItem 6</div>
</div>
文件项目1
文件项目2
文件项目3
文件项目4
文件项目5
文件项目6
一种可能的解决方案是使用lodash库创建块列表,然后在其自己的容器中呈现每个块:
render(){
常量元素=[1,2,3,4,5,6,7,8];
const chunked=_chunk(元素,3);/[[1,2,3],[4,5,6],[7,8]]
返回(
{chunked.map(chunk=>(
{chunk.map(元素=>(
{elem}
))}
))}
);
}
这将生成以下标记:
<div class="row">
<div class="col">1</div>
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
<div class="col">5</div>
<div class="col">6</div>
</div>
<div class="row">
<div class="col">7</div>
<div class="col">8</div>
</div>
1.
2.
3.
4.
5.
6.
7.
8.
当您需要为每个行容器找到一个键时,问题已经开始了,因为react希望相同类型的同级具有唯一键
获得相同对齐的更好方法是只使用一个容器,当行满时让元素自动浮动到下一个“行”中。例如,可通过以下方式实现:
constnumitemsperrow=3;
const containerStyle={
显示:“flex”,
宽度:“600px”,
柔性包装:“包装”
};
const itemStyle={
最小宽度:`${100/numItemsPerRow}%`,
textAlign:“居中”,
边框:“1px纯黑”,
框大小:“边框框”
};
常量元素=[1,2,3,4,5,6,7,8];
常量网格=()=>(
{elements.map(elem=>{elem})}
);
.一种可能的解决方案是使用lodash库创建块列表,然后在其自己的容器中呈现每个块:
render(){
常量元素=[1,2,3,4,5,6,7,8];
const chunked=_chunk(元素,3);/[[1,2,3],[4,5,6],[7,8]]
返回(
{chunked.map(chunk=>(
{chunk.map(元素=>(
{elem}
))}
))}
);
}
这将生成以下标记:
<div class="row">
<div class="col">1</div>
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
<div class="col">5</div>
<div class="col">6</div>
</div>
<div class="row">
<div class="col">7</div>
<div class="col">8</div>
</div>
1.
2.
3.
4.
5.
6.
7.
8.
当您需要为每个行容器找到一个键时,问题已经开始了,因为react希望相同类型的同级具有唯一键
获得相同对齐的更好方法是只使用一个容器,当行满时让元素自动浮动到下一个“行”中。例如,可通过以下方式实现:
constnumitemsperrow=3;
const containerStyle={
显示:“flex”,
宽度:“600px”,
柔性包装:“包装”
};
const itemStyle={
最小宽度:`${100/numItemsPerRow}%`,
textAlign:“居中”,
边框:“1px纯黑”,
框大小:“边框框”
};
常量元素=[1,2,3,4,5,6,7,8];
常量网格=()=>(
{elements.map(elem=>{elem})}
);
.只有事先将列表分成三块,然后在列表上迭代,这才有可能。这样做。但在大多数情况下,你不需要这个。最好只有一个容器,让元素自己浮动到下一行。换句话说,对齐应该使用css而不是html来完成。这只有在您事先将列表分成三块,然后在列表上迭代时才可能。这样做。但在大多数情况下,你不需要这个。最好只有一个容器,让元素自己浮动到下一行。换句话说,对齐应该用css而不是html来完成。谢谢你的回答。如果我想限制每行的项目数量,那么我必须使用百分比宽度,对吗?@mowtheone完全正确。每行的宽度为
100%/number\u of\u items\u
。@mowtheone我创建了一个。设置项目和行之间的间距最干净的方法是什么?@mowtheone我改变了主意:)。最干净的解决方案是使用csscalc()
计算最大宽度。查看我更新的代码沙盒。谢谢你的回答。如果我想限制每行的项目数量,那么我必须使用百分比宽度,对吗?@mowtheone完全正确。每行的宽度为100%/number\u of\u items\u
。@mowtheone我创建了一个。设置项目和行之间的间距最干净的方法是什么?@mowtheone我改变了主意:)。最干净的解决方案是使用csscalc()
计算最大宽度。查看我更新的代码沙盒。