问题描述
我有一些需要复位的后坐状态。
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;
}
},})