我是 React 的新手。状态数组在排序功能后仅更新一次。为什么第二次触发排序功能后不再更新?
const [cases, setCases] = useState([1, 2, 3, 4, 5]);
let sortDown = true
let sorted = []
function sort(){
const copy = [...cases]
if(sortDown){
sorted = copy.sort(function(a, b){
return b - a
})
} else {
sorted = copy.sort(function(a, b){
return a - b
})
}
sortDown = !sortDown
setCases(sorted)
}
最佳答案
当 props 或 state 改变时,React 会重新渲染组件。在您的情况下,您声明 sorted
数组,然后将其传递给 setCases。所以第一次 setCases 需要 sorted
数组,这是新的值(value)。然后再次对值进行排序并改变 sorted
数组并将其再次传递给 setCases。但是 setCases 不考虑 sorted
作为一个新数组,因为它发生了变异,所以引用没有改变。对于 React,它仍然是您第一次传递的同一个数组。您需要返回新数组,然后将其传递给 setCases
.
您应该做的另一件事是将 sortDown 存储在状态中。否则它将在每次渲染时重新初始化。
以下代码应该适用于您的情况:
const [cases, setCases] = useState([1, 2, 3, 4, 5]);
const [sortDown, setSortDown] = useState(true)
function sort(){
const copy = [...cases] // create copy of cases array (new array is created each time function is called)
if(sortDown){
copy.sort(function(a, b){ // mutate copy array
return b - a
})
} else {
copy.sort(function(a, b){
return a - b
})
}
setSortDown(!sortDown); // set new value for sortDown
setCases(copy); // pass array to setCases
}
关于javascript - 为什么在 React Hooks 中排序后数组不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139829/