javascript - 如何在循环中启动一个组件并在 3 次迭代中关闭它

标签 javascript reactjs jsx

您好,我在循环中搜索开放标记的解决方案,并将其全部关闭 3 次迭代。目标是创建一个基于容器行和列的烤架。我的问题是我不知道该怎么办。

示例:

    render(){
        const arrayName = ["john", "bob", "joe", "mat", "toto", "tata"]
        let arrayEl = [];
        let count = 1; 
          for ( let i = 0; i < arrayName.length; i++ ) {
             let name = arrayName[i]

             if (count === 1) {
                 arrayEl.push(<div className="row">);
                 arrayEl.push(<p className="col">{name}</p>);
                 count ++;
                 continue;
             }
             if (count === 3) {
                 arrayEl.push(<p className="col" >{name}</p>);
                 arrayEl.push(</div>);
                 count = 1;
                 continue;
             }
           }
        return (<div className="container">{arrayEl}</div>)
    }

想要的结果是:

<div className="container">
    <div className="row">
        <div className="col">john</div>
        <div className="col">bob</div>
        <div className="col">joe</div>
    </div>
    <div className="row">
        <div className="col">mat</div>
        <div className="col">toto</div>
        <div className="col">tata</div>
    </div>
</div>

感谢您的帮助

编辑

问题是我们无法在不关闭某人元素或组件的情况下添加它。

很糟糕:

arrayEl.push(<div className="row">)

很好:

arrayEl.push(<div className="row"/>) or arrayEl.push(<div className="row"></div>)

最佳答案

我会更改您的数据:

 ["john", "bob", "joe", "mat", "toto", "tata"]
// to
 [["john", "bob", "joe"], ["mat", "toto", "tata"]]

Checkout https://lodash.com/docs/4.17.11#chunk for example of that

然后你可以嵌套 2 个 .map 来复制 JSX 中的结构:


const chunk = (arr, chunckSize) => arr.reduce((chunks, value, index) => {
  const chunckIndex = Math.floor(index / chunckSize)
  const c = chunks[chunckIndex] || (chunks[chunckIndex] = [])
  c.push(value)
  return chunks
}, [])

render() {
    const arrayName = ["john", "bob", "joe", "mat", "toto", "tata"]

    return (
        <div className="container">
            {chunk(arrayName, 3).map(names => (
                <div className="row">
                    {names.map(name => <div className="col">{name}</div>)}
                </div>
            ))}
        </div>
    )
}

关于javascript - 如何在循环中启动一个组件并在 3 次迭代中关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56755949/

相关文章:

reactjs - enzyme 无法通过 Prop 找到组件

javascript - Firebase 函数 onCreate() onDelete() 路径特异性

javascript - 图像弹出在一个稳定的位置

javascript - 如何在 react 导航中定位后退箭头按钮

javascript - 从 React-Select 组件获取所选值的最佳方法是什么?

reactjs - 使用 create-react-app 的多个入口点

javascript - 尽管调试器另有说明,为什么该变量不被视为 0?

javascript - 从 JavaScript 转换为

php - jquery获取最近元素的所有值

javascript - 动态 redux 应用程序加载与存储组合和 mergeReducers