javascript - React Recoil 状态未正确重置
问题描述
我有一些反冲状态,我想重置。
import { useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil';
...
//should be used for flushing the global recoil state, whenever a user submits an invoice
const resetLabelInvoiceState = useResetRecoilState(labelInvoiceState);
const resetMetaDataState = useResetRecoilState(metadataState);
const resetGlobalAnnotationsState = useResetRecoilState(globalAnnotationState)
我已经完成了功能,我想像这样重置所有状态。我都尝试过使用和不使用重置功能。
const flushRecoilState = () =>{
console.log('flushed state')
return(
resetLabelInvoiceState(),
resetMetaDataState(),
resetGlobalAnnotationsState()
)
}
...
flushRecoilState()
return history.push('/historyinvoices')
...
当我检查状态时,它没有被重置。是因为库中的“useResetRecoilState”不能正常工作,没有正确实现,还是有其他问题。
我可以只使用常规useRecoilState
钩子,并将状态设置回默认值。
有人知道为什么会这样吗?
解决方案
我今天也遇到了同样的问题,原来是我自己的错。只是把它放在这里以供将来参考。
我的问题是我更改了选择器中的 set 方法,如果您自定义了 set 方法,则需要检查传入的值是否为DefaultValue
.
const targetYear = selector({
key: 'targetYear',
get: ({get}) => get(targetYearAtom),
set: ({set, get}, method) => {
const currentTargetYear = get(targetYearAtom);
switch(method) {
case 'prevYear':
set(targetYearAtom, currentTargetYear - 1);
return;
case 'nextYear':
set(targetYearAtom, currentTargetYear + 1);
return;
default:
if (method instanceof DefaultValue) {
set(targetYearAtom, method);
}
return;
}
},
})
推荐阅读
- python - 如何根据某些分组列取消pandas数据框?
- sql-server - SELECT COUNT(*) 查询是否必须进行全表扫描?
- android - 如何获取位置或简单的 id 来提供基于位置的内容?
- php - 如何将每个函数的所有值推送到一个数组中 - PHP DomCrawler
- python - Python TypeError:不接受任何参数
- json - Angular 6:从内部映射 JSON
- php - 在 Woocommerce 中仅显示特定客户所在国家/地区的价格
- java - 弹簧框架:@RequestBody 中的 UUID
- java - 使用 log4j 的 Spring Boot 堆栈溢出
- python - 从熊猫数据框中提取数据