我有一些需要复位的后坐状态。
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)
我已经设置了功能,我希望可以重置所有这样的状态。我尝试过是否使用重置功能。</ p>
const flushRecoilState = () =>{
console.log('flushed state')
return(
resetLabelInvoiceState(),
resetMetaDataState(),
resetGlobalAnnotationsState()
)
}
...
flushRecoilState()
return history.push('/historyinvoices')
...
当我检查状态时,不会重置。是因为“ useResetRecoilState”无法从库中正常工作,未正确实施,还是存在其他问题。
我可以只使用常规的useRecoilState
钩子,然后将状态设置回默认值。
有人知道为什么会这样吗?
答案 0 :(得分:0)
我今天也遇到了同样的问题,原来是我自己的错。把它放在这里以备将来参考。
我的问题是我改变了选择器中的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;
}
},
})