反应后座力状态未正确重置

时间:2020-08-11 19:31:50

标签: javascript reactjs recoiljs

我有一些需要复位的后坐状态。

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钩子,然后将状态设置回默认值。

有人知道为什么会这样吗?

1 个答案:

答案 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;
    }
  },
})