Reactjs 通过事件处理程序进行一次更改后,反应状态未更新

Reactjs 通过事件处理程序进行一次更改后,反应状态未更新,reactjs,ziggeo-sdk,ziggeo-api,Reactjs,Ziggeo Sdk,Ziggeo Api,我有一个简单的状态来处理用户可以做多少重记录 const [retakes, setRetakes] = useState(0); const onRerecord = () => { console.log(retakes + 1, "rere"); setRetakes(retakes + 1); }; 每当用户从react-ziggeo:rerecordings请求重新记录时,onRerecord就会触发 <ZiggeoRecorder

我有一个简单的状态来处理用户可以做多少重记录

const [retakes, setRetakes] = useState(0);
  const onRerecord = () => {
    console.log(retakes + 1, "rere");
    setRetakes(retakes + 1);
  };
每当用户从react-ziggeo:rerecordings请求重新记录时,onRerecord就会触发

<ZiggeoRecorder
          apiKey={process.env.ZIGGEO_API_TOKEN}
          video={videoToken}
          onProcessed={onProcessed}
          recordings={3}
          onRerecord={onRerecord}
        />
在第一次重新录制时,状态更新很好,但是之后状态仍然相同,只是没有发生任何更改,您可以在这里看到1次重新录制的console.logs每次都是相同的


尝试此操作-更新以前的状态

const [retakes, setRetakes] = useState(0);
  const onRerecord = () => {
    console.log(retakes + 1, "rere");
    setRetakes(retakes => retakes + 1);
  };
ZiggeoRecorder似乎正在缓存onRerecord的第一个引用,然后使用相同的实例

当onRerecord关闭并重新执行时,它在将来的调用中始终使用相同的值:

您可以使用useState的函数变体来解决此问题:

setRetakes(retakes => retakes + 1);

这里似乎没有什么问题。不过,看到ZigGeorgeCorder的代码会很有趣。@Regnidorhcs,这几乎就是ziggeo的实现,除了从ziggeo导入{ZigGeorgeCorder}之外什么都没有。这能回答您的问题吗?您是否将此部分添加到代码中?useEffect=>{if recorder{//DO stuff here recorder.onany_事件,函数rec{…},recorder;recorder.getattribute_name;},[recorder];我只想提到的是,录音={3}将限制每个人只能录制一次录音,最多2次再录制,总共3次录音。它应该是全自动的,不需要对您的终端进行任何额外的检查。通过使用onRerecord,您可以知道它确实发生了,并且发生了多少次。