html - 渲染 div 中的按钮列
问题描述
我有一个语言列表,我想将它们分别呈现为列中的按钮,在 div 中。我希望能够根据我设置的变量buttonsPerColumn 来呈现它们。
例如,如果我有 40 种语言和四列,我将每列呈现 10 个按钮。如果我有 36 种语言,我将为前三种语言渲染 10 个按钮,为其余的渲染 6 个按钮。但是,我不知道如何做到这一点。我已经控制台记录了我想要的输出,但是,我希望以按钮形式。如何在我的方法中创建我需要的所有列和按钮 div,然后一次全部输出?
css
.languageList {
position: absolute;
height: 35%;
width: 25%;
left: 43%;
top: 15%;
background-color: #b6bbf4;
display: flex;
justify-content: space-between;
}
.languageColumn {
position: relative;
width: 25%;
height: 100%;
background-color: red;
}
语言列表.jsx
class LanguageList extends Component {
render() {
this.renderButtons();
return (
<React.Fragment>
<div className="languageList">
<div className="languageColumn" />
</div>
</React.Fragment>
);
}
renderButtons = () => {
let buttonsPerColumn = 6;
const languages = LanguageList.getLanguages();
const myArray = LanguageList.arrayFromObject(languages);
var i, language;
let column = 0;
for (i = 0; i < myArray.length; i++) {
language = myArray[i];
console.log("Render " + language + " in column " + column);
if (i == buttonsPerColumn) {
column++;
buttonsPerColumn += buttonsPerColumn;
}
}
};
static arrayFromObject = object => {
var myArray = [];
var key;
for (key in object) {
myArray.push(key);
}
return myArray;
};
static getLanguages = () => {
return {
Azerbaijan: "az",
Albanian: "sq",
Amharic: "am",
English: "en",
Arabic: "ar",
Armenian: "hy",
Afrikaans: "af",
Basque: "eu",
German: "de",
Bashkir: "ba",
Nepali: "ne"
};
};
}
代码沙箱链接:
解决方案
尝试这个:
import React, { Component } from "react";
class LanguageList extends Component {
render() {
return (
<React.Fragment>
<div className="languageList">{this.renderButtons()}</div>
</React.Fragment>
);
}
renderButtons = () => {
const buttonsPerColumn = 6;
const languages = LanguageList.getLanguages();
const myArray = LanguageList.arrayFromObject(languages);
const columns = [];
for (let i = 0; i < myArray.length; i++) {
const columnIndex = Math.floor(i / buttonsPerColumn);
if (!columns[columnIndex]) columns[columnIndex] = [];
columns[columnIndex].push(
<button className="languageButton">{myArray[i]}</button>
);
}
return columns.map((singleColumn, index) => (
<div key={index} className="languageColumn">
{singleColumn}
</div>
));
};
static arrayFromObject = object => {
var myArray = [];
var key;
for (key in object) {
myArray.push(key);
}
return myArray;
};
static getLanguages = () => {
return {
Azerbaijan: "az",
Albanian: "sq",
Amharic: "am",
English: "en",
Arabic: "ar",
Armenian: "hy",
Afrikaans: "af",
Basque: "eu",
German: "de",
Bashkir: "ba",
Nepali: "ne"
};
};
}
export default LanguageList;
推荐阅读
- visual-studio-code - VSCode 不理解 React Fragment <>,不识别较新的 ES 语法 (.?)
- powershell - 如何在没有管理员权限的情况下打开 Windows Powershell (Elevated)?
- sql-server - 从代码调用存储过程会导致错误
- ios - 如何设置tableViewIndex的自定义宽度?
- html - 如何确保填充也影响所有行而不仅仅是第一行?
- ios - 如何在 iOS swift 中使用 AVPlayer 访问 iOS Files App 中存在的视频文件?
- ios - 如何在 iOS 13 的不同屏幕上显示不同的内容?
- python - 有没有办法在 python 中使用 DATA_BLOB?
- html - 导航栏使用 Flexbox 和无序列表的问题
- python - python str 对象不支持项赋值