Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义了列数的Reactjs网格布局_Javascript_Arrays_Reactjs_Layout_Grid - Fatal编程技术网

Javascript 定义了列数的Reactjs网格布局

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='

如何使用具有以下格式的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='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我改变了主意:)。最干净的解决方案是使用css
calc()
计算最大宽度。查看我更新的代码沙盒。谢谢你的回答。如果我想限制每行的项目数量,那么我必须使用百分比宽度,对吗?@mowtheone完全正确。每行的宽度为
100%/number\u of\u items\u
。@mowtheone我创建了一个。设置项目和行之间的间距最干净的方法是什么?@mowtheone我改变了主意:)。最干净的解决方案是使用css
calc()
计算最大宽度。查看我更新的代码沙盒。