reactjs - 需要解释“React 切换“显示全部”和“显示获胜者”不起作用”
问题描述
我很难理解这篇文章中的这段代码。
具体来说:我观察到第一次单击按钮时,电影数组被过滤为仅显示获胜者,这意味着 if/else 语句的这一部分已被执行。但是为什么在 filterWinner 函数末尾的 return !prev 之前将 'prev' 更改为 '!prev' 呢?
if (!prev) {
// winner = true
console.log(prev);
const winners = movies.filter((movie) => movie.winner === "True");
setFilteredMovies(winners);
}
有人可以向我解释这段代码吗?谢谢你。
帖子: React 切换“显示全部”和“显示获胜者”不起作用
const toggleWinner = () => {
//winner = false
filterWinner(prev => {
if(!prev) { // winner = true
const winners = movies.filter((movie) => movie.winner === "True");
setMovies(winners);
}
else {
setMovies(movies);
}
return !prev
});
};
解决方案
filterWinner
也许应该命名为setWinner
or setWinnerFilter
。
如果在设置这样的 React 状态时传递了一个函数,那么在函数末尾返回的就是新winner
状态。由于我们返回!prev
,我们反转任何布尔值winner
。因此,它在和winner
之间切换。true
false
推荐阅读
- rust - 为具有反序列化特征绑定的泛型派生反序列化时无法推断类型参数的类型
- postgresql - 从 DatabaseMetaData.getIndexInfo() 中为 Postgres 发现索引“nulls first|last”
- nlp - CUDA 错误:调用 `cublasCreate(handle)` 时出现 CUBLAS_STATUS_ALLOC_FAILED
- google-cloud-platform - 与常规部署相比,使用 Bitnami 部署有什么好处?
- java - Openshift中的Spring Boot / VertX调用超时
- .net - 如果未安装 ODAC,为什么我们需要向所有调用项目添加对 Oracle.ManagedDataAccess 的引用?
- html - 提交后重置角度表单
- javascript - WebRTC - Offer-Answer 发生两次
- hibernate-search - Hibernate Search 仅添加来自 IndexedEmbedded 类的 DocumentId
- iis - 在 windows server 2012 R2 的 iis 中创建自签名证书