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

问题描述

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...