【发布时间】:2019-11-29 23:51:22
【问题描述】:
我有一个语音听写自定义挂钩,以及一个单独的自定义挂钩,该挂钩将听写结果附加到存储“Note”值的对象。
如果用户过早点击保存,我仍然需要在保存注释的 API 调用之前附加部分结果。
我的代码是这样的
function NoteDictation(props) {
const [
results,
partialResults,
error,
toggleRecognizing,
speechHasStarted,
] = useDictation();
const [note, setNote, saveNoteAPICall, updateNoteAPICall] = useNote({})
//Use Note is a custom hook that has that certain type of note's properties built in (they're medical notes, and we have a custom hook for each type of note).
function handleSavePress(){
if(partialSpeechResults){
//If the dictation software hasn't returned a final result,
//append the partialSpeechResults
setNote({...note, text: note.text + partialSpeechResults})
}
//SaveNote does not use the value set above if there are partial results.
saveNote()
}
return (
<View>
<NoteContents note={note} results={results} partialResults={partialResults} />
<Button onPress={handleSavePress> />
</View>
)
}
问题是,正在调用 SaveNote 并且正在使用笔记的旧状态...状态设置未按时完成。
我似乎无法在此处使用 useEffect 挂钩来监视更改,因为我正在调用 API 来立即保存便笺,并且在保存时它正在访问便笺状态。
处理此问题的最佳方法是什么?谢谢。
【问题讨论】:
-
目前useState hook中的setState不支持回调。但是您可以使用 useEffect 挂钩来执行“渲染后”回调并与当前状态值协调。
-
是的,理解,但如上所述,我有一个独特的情况,我在之后立即使用该值将其保存在 API 调用中。
-
也许这个答案可以帮助你stackoverflow.com/questions/53446020/…。
标签: javascript reactjs react-hooks