如何替换useState中的Array?
How to replace Array in useState?
我想制作 table 内容被用户 select 更改的程序。所以我把空数组放在useState中,像这样。
const [statInfo, setStatInfo] = useState([]);
和select html代码:
<select
name="statSelect"
onChange={(e) => {
handleChange(e);
setStat();
}}>
<option value="0to60">무각 60</option>
<option value="1to60">1각 60</option>
<option value="2to60">2각 60</option>
</select>
当我select选项时,数据会被改变。但我不知道如何使用 useState 来做到这一点。
这些是数据
const stat = [
[11421, 1059, 782, "10%", "50%", "10%", "25%"],
[11992, 1112, 821, "15%", "55%", "20%", "30%"],
[10401, 1114, 1049, "20%", "30%", "35%", "25%"]
];
还有我的 React 代码:
async function setStat() {
console.log('calling');
if (stat === "무각 60") {
await setStatInfo(stat[0]);
console.log(statInfo);
} else if (stat === "1각 60") {
await setStatInfo(stat[1]);
console.log(statInfo);
} else {
await setStatInfo(stat[2]);
console.log(statInfo);
}
}
我试过使用地图。但是我也不知道怎么用map
是否有每次更改整个数组的功能或方法?
我猜你可以在你的 handleChange 中处理这个动作:
handleChange(e) {
stat.forEach(async (att) => {
if(att === e.target.value){
await setStatInfo(att)
}
})
}
如果你不能并且想使用你的 setStat 函数,我想你可以做类似的东西:
setStat = async (e) => {
stat.forEach(async (att) => {
if(att === e.target.value){
await setStatInfo(att)
}
})
}
并在你的 onChange
中调用 this.setStat(e)
没有理由在函数 setStat 中使用异步(如果我错了请纠正我!)。
你应该select像这样:
<select onChange={handleChange}>
<option value="grapefruit">Grapefruit</option>
<option value="lime">Lime</option>
<option value="coconut">Coconut</option>
</select>
然后你可以有 handleChange
更新状态的函数:
handleChange = (event) => {
if(event.target.value === "grapefruit"){
setStatInfo([...stat[0]]);
} else if (event.target.value === "lime"){
setStatInfo([...stat[1]]);
} else if (event.target.value === "coconut"){
setStatInfo([...stat[2]]);
}
}
请注意,我使用的是箭头函数(常规函数不起作用)。而在react
中,我们不调用函数,我们传递函数。
您还可以为 select
设置默认值。例如,
const [value, setValue] = useState("default value");
然后将其传递到您的 select 表单中:
<select value={value} onChange={handleChange}>
我需要将函数放在大括号 {} 中,这样 React 才能区分 Javascript(大括号内)和 JSX。
在此之后,您可以return组件(我假设您使用的是函数组件):
return (
<form onSubmit={handleSubmit}>
<select value={value} onChange={handleChange}>
<option value="grapefruit">Grapefruit</option>
<option value="lime">Lime</option>
<option value="coconut">Coconut</option>
<input type="submit" value="Submit" />
</form>
);
要仅将数组的某些索引更新为表达式,我会使用 Array.prototype.map()
和索引:
const indexToUpdate = 1;
const newValue = 'foo';
setStatInfo(statInfo.map(
(value, index) => index === indexToUpdate ? newValue : value
));
它不能用于复制粘贴答案,但我相信你可以利用它。
我想制作 table 内容被用户 select 更改的程序。所以我把空数组放在useState中,像这样。
const [statInfo, setStatInfo] = useState([]);
和select html代码:
<select
name="statSelect"
onChange={(e) => {
handleChange(e);
setStat();
}}>
<option value="0to60">무각 60</option>
<option value="1to60">1각 60</option>
<option value="2to60">2각 60</option>
</select>
当我select选项时,数据会被改变。但我不知道如何使用 useState 来做到这一点。 这些是数据
const stat = [
[11421, 1059, 782, "10%", "50%", "10%", "25%"],
[11992, 1112, 821, "15%", "55%", "20%", "30%"],
[10401, 1114, 1049, "20%", "30%", "35%", "25%"]
];
还有我的 React 代码:
async function setStat() {
console.log('calling');
if (stat === "무각 60") {
await setStatInfo(stat[0]);
console.log(statInfo);
} else if (stat === "1각 60") {
await setStatInfo(stat[1]);
console.log(statInfo);
} else {
await setStatInfo(stat[2]);
console.log(statInfo);
}
}
我试过使用地图。但是我也不知道怎么用map
是否有每次更改整个数组的功能或方法?
我猜你可以在你的 handleChange 中处理这个动作:
handleChange(e) {
stat.forEach(async (att) => {
if(att === e.target.value){
await setStatInfo(att)
}
})
}
如果你不能并且想使用你的 setStat 函数,我想你可以做类似的东西:
setStat = async (e) => {
stat.forEach(async (att) => {
if(att === e.target.value){
await setStatInfo(att)
}
})
}
并在你的 onChange
中调用this.setStat(e)
没有理由在函数 setStat 中使用异步(如果我错了请纠正我!)。
你应该select像这样:
<select onChange={handleChange}>
<option value="grapefruit">Grapefruit</option>
<option value="lime">Lime</option>
<option value="coconut">Coconut</option>
</select>
然后你可以有 handleChange
更新状态的函数:
handleChange = (event) => {
if(event.target.value === "grapefruit"){
setStatInfo([...stat[0]]);
} else if (event.target.value === "lime"){
setStatInfo([...stat[1]]);
} else if (event.target.value === "coconut"){
setStatInfo([...stat[2]]);
}
}
请注意,我使用的是箭头函数(常规函数不起作用)。而在react
中,我们不调用函数,我们传递函数。
您还可以为 select
设置默认值。例如,
const [value, setValue] = useState("default value");
然后将其传递到您的 select 表单中:
<select value={value} onChange={handleChange}>
我需要将函数放在大括号 {} 中,这样 React 才能区分 Javascript(大括号内)和 JSX。
在此之后,您可以return组件(我假设您使用的是函数组件):
return (
<form onSubmit={handleSubmit}>
<select value={value} onChange={handleChange}>
<option value="grapefruit">Grapefruit</option>
<option value="lime">Lime</option>
<option value="coconut">Coconut</option>
<input type="submit" value="Submit" />
</form>
);
要仅将数组的某些索引更新为表达式,我会使用 Array.prototype.map()
和索引:
const indexToUpdate = 1;
const newValue = 'foo';
setStatInfo(statInfo.map(
(value, index) => index === indexToUpdate ? newValue : value
));
它不能用于复制粘贴答案,但我相信你可以利用它。