reactjs - React JS 条件渲染,如 Eval
问题描述
我正在创建一个动态按钮。问题是CurrentPage
和KeyIndex
已经在渲染之前进行了评估。
private DisplayButtons = () => {
let cont = [];
let startAt, endAt;
startAt = this.state.StartAt;
endAt = this.state.EndAt;
if (this.state.CurrentPage == 1) {
endAt = endAt =
this.state.TotalRecord / this.state.PageSize >= 5
? 5
: Math.ceil(this.state.TotalRecord / this.state.PageSize);
}
for (var i = startAt; i <= endAt; i++) {
cont.push(
<li onClick={this.onPagerClick} data-id={i} className="sui-pager-element">
<a
className={
this.state.CurrentPage == this.state.KeyIndex
? 'sui-selected sui-pager-element'
: 'sui-pager-element'
}
>
{i}
</a>
</li>,
);
}
this.setState({
DataButtons: cont,
});
};
解决方案
很难理解这个孤立的代码。但是,我提出一些意见,希望能改善其功能。
- 我知道这
DisplayButtons
是类组件的内部功能。如果是这种情况,则应displayButtons
使用第一个小写字母来调用它。 - 你可以这样重构:
const { startAt, CurrentPage, TotalRecord, PageSize, KeyIndex } = this.state;`
let { endAt } = this.state;
- 更好地在 for 循环中使用 FP。这不是很清楚。
cont
应该是一个对象数组而不是 html。然后,在渲染中,您执行以下操作{ DataButtons.map(b => <ButtonView>) }
:
推荐阅读
- c# - 在 dll(Unity 内部)中调用 Encoding.UTF8.GetBytes(JSON.net) 会导致异常,而使用“dotnet run”运行源代码有效
- android - 未找到可接受的模块。本地版本为0,远程版本为0
- java - 错误查看更改时 JSON 输入意外结束
- sas - SAS ODS 无法在打印机中打印报告
- vb.net - StreamWriter 对象不使用提供的绝对路径
- sas - 如何在if语句中使用变量四分位数和四分位数范围?
- ruby - 语法错误,意外的 '}',期待 =>
- c++ - 如何在 WSL 上修复智能感知“无法找到符号的定义”
- javascript - Vue中的无效字符串长度RangeError仅在某些环境中
- verilog - 使线向量与一根线具有相同的值