【发布时间】:2023-04-07 04:40:01
【问题描述】:
我有以下代码:
let pa = 0;
let pw = 0;
let pc = 0;
let pi = 0;
let pr = 0;
this.state.array.data.map((i) => {
if (i.mdn === this.queryParams.mdn && i.sources != null) {
return (i.sources.map((sources) => {
if (sources.source.toString().toLowerCase() === "a") {
pa = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "w") {
pw = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "c") {
pc = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "i") {
pi = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "r") {
pr = sources.t.sessions.u
}
}))
}
},
this.setState({
web: [],
app: [],
preference: [{a: pa}, {w: pw}, {c: pc}, {i: pi}, {r: pr}]
}),
一旦我设置状态,它实际上并没有设置它,它只需要 0 并在那里抛出 throws。
【问题讨论】:
-
修改状态的地图是个坏主意。您可能应该改用
forEach。 Map 应该返回一个新数组而不影响其余代码。目前的代码非常混乱。 -
结合@JuanMendes 的建议,您可以通过用开关替换您的
if语句来真正使这更简洁。它可以让你用 1 替换你所有的...toString().toLowerCase()调用。 -
你正在设置一个全局变量...
preferenceApp其他都是全局的 -
i.sources.map((sources)- 您有名为sources的参数,并且您在sources上调用 map。您应该将参数更改为source或不同的值。 -
@EvanBechtol 不是每个人都同意你的观点,
switch更干净,你需要在那里添加所有的休息时间。话虽如此,他们至少应该是if/elses以使其更清晰
标签: javascript reactjs