Javascript 如何在下拉菜单的“一次更改中的反应”中更新useState中的数组元素状态?(这里我不是说对象数组)
每次切换到下拉菜单时,我都要更新Javascript 如何在下拉菜单的“一次更改中的反应”中更新useState中的数组元素状态?(这里我不是说对象数组),javascript,reactjs,state,use-state,Javascript,Reactjs,State,Use State,每次切换到下拉菜单时,我都要更新状态。意味着保存状态并更新它,然后再次像这样。。。 我正在尝试以下代码: 我的React代码: var [state, setState] = useState({ page: 0, username: "Hey Baby!", filter: ["search", "story", 0], result: 0, processTime: 0 }); va
状态。意味着保存状态并更新它,然后再次像这样。。。
我正在尝试以下代码:
我的React
代码:
var [state, setState] = useState({
page: 0,
username: "Hey Baby!",
filter: ["search", "story", 0],
result: 0,
processTime: 0
});
var { page, username, filter, result, processTime } = state;
var handleChange = name => e => {
if (e.target.value == "popularity") {
setState({
...state, filter: ["search", filter[1], filter[2]]
});
urls =
"search~~"+
filter[1] +
"~0~" +
filter[2];
}
if (e.target.value == "date") {
setState({
...state, filter: ["search_by_date", filter[1], filter[2]]
});
urls =
"search_by_date~~"+
filter[1] +
"~0~" +
filter[2];
}
if (e.target.value == "stories") {
setState({
...state, filter: [filter[0], "story", filter[2]]
});
urls =
filter[0]+"~~story~0~" +
filter[2];
}
if (e.target.value == "comments") {
setState({
...state, filter: [filter[0], "comment", filter[2]]
});
urls =
filter[0]+"~~comment~0~" +
filter[2];
}
axios
.get(`${process.env.REACT_APP_API}/posts/${urls}`)
.then(function(response) {
setState({
result: response.data.datas.nbHits,
processTime: response.data.datas.processingTimeMS
});
setPosts(response.data.datas);
console.log(response.data.datas);
})
.catch(function(error) {
console.log(error);
});
return (
<div>
<div className="bg-white">
<span>
search{" "}
<select onChange={handleChange('filter')}>
<option value="stories">stories</option>
<option value="comments">comments</option>
</select>
</span>
<span>
{" "}
by{" "}
<select onChange={handleChange('filter')}>
<option value="popularity">popularity</option>
<option value="date">date</option>
</select>
</span>
</div>
</div>
p.S.我不知道过滤器阵列元素状态是否得到更新。第一次更改“选择”菜单选项时,它会工作。但当我再次切换到不同的选项时,它会抛出上述类似的错误
setState({
result: response.data.datas.nbHits,
processTime: response.data.datas.processingTimeMS
});
我认为你的状态更新不正确。您应该像这样更新状态
setState({
...state,
result: response.data.datas.nbHits,
processTime: response.data.datas.processingTimeMS
});
我认为你的状态更新不正确。您应该像这样更新状态
setState({
...state,
result: response.data.datas.nbHits,
processTime: response.data.datas.processingTimeMS
});