javascript - 状态不变 - onClick 反应钩子
问题描述
我正在努力改变我的状态......
基本上我有3个重要的功能:
run()
触发的功能onClick
:
const run = async (e) => {
e.preventDefault();
await setLoadingTrue();
await translateToEnglish();
await aiEngine();
};
以translateToEnglish()
表格形式翻译输入:
const translateToEnglish = async () => {
try {
const token = "***********";
const parameters = {
mode: "no-cors",
method: "post",
auth_key: token,
text: [description , audience],
target_lang: "EN",
source_lang: "FR",
};
const result = await axios.post(
"https://api.deepl.com/v2/translate",
querystring.stringify(parameters)
);
return setAudienceEN(result.data.translations[1].text)
} catch (err) {
console.log("there is an error:", err);
}
};
这可以使用具有先前在函数中设置aiEngine()
的状态的翻译数据。audienceEN
translatetoEnglish()
const aiEngine = async () => {
try {
const parameters = {
prompt: `Write an ad for :\n""""""\n${descriptionEN}\n""""""\nThis is the ad aimed at ${audienceEN}:\n""""""`,
};
const result = await axios.post(
"https://api.aiengine.com/",
parameters,
{
headers: {
Authorization:
"Bearer " + "********",
"Content-Type": "application/json",
},
}
);
const sortedResults = result.data.choices.map((val) => val.text);
setCompletionsEN(sortedResults);
} catch (err) {
console.log("Il y a une erreur : ", err);
}
};
问题是这return setAudienceEN(result.data.translations[1].text)
不起作用,因为当我console.log(audienceEN)
进入时aiEngine()
,它是空的,不幸的是我不知道为什么......
任何想法为什么家伙?
先感谢您
解决方案
由于更新状态是异步操作,这可能aiEngine()
是没有获得更新值的原因audienceEN
。要处理此问题,您可以在使用aiEngine()
更新后调用:audienceEN
useEffect
useEffect(()=>{
const callAiEngine = async ()=>{
await aiEngine();
}
if(audienceEN){
callAiEngine();
}
},[audienceEN])
推荐阅读
- email - 使用 Ansible 邮件拒绝发件人地址
- c# - Async implementation of Custom Commands in VSIX
- google-apps-script - 为可在 Android 移动应用程序中使用的 Google 表格创建“功能菜单”
- javascript - 有没有办法在 emojionarea 的光标位置添加文本?
- java - 在 Kotlin 中实现返回 Collection 的 Java 方法
- jquery - JQuery button.click没有响应
- sonarqube - 错误:您必须为“my:project”定义以下强制属性:sonar.sources
- javascript - 无法将图像(字节数组)从表转换为多部分文件 Spring mvc
- javascript - 尝试使用@react-native-community/slider 时,在 UI 管理器中找不到 RNCSlider
- hive - Hive 表用自定义默认值替换时间戳列 NULL 值