gpt4 book ai didi

javascript - React Hook 不更新

转载 作者:行者123 更新时间:2023-12-04 09:53:13 25 4
gpt4 key购买 nike

一般来说,React 和 JS 对我来说都是新的,所以我还是有点不擅长。在整个情况下,我最不了解的是 React Hooks 以及它们有时不更新的问题。我知道为什么以及如何避免多次调用 setter 之类的东西,但是这个特殊问题对我来说很难理解,甚至很难正确地用谷歌搜索。我要么在这里找到基于类的 this.state 的东西,要么在这里找到未回答的问题。

当我需要它时,如何进行钩子(Hook)更新。例如,这是 Autocomplete Material-UI 中的组件。当我在其中选择一个选项时,我想将其值放入 getTables 中的 newFKSchema const使用它。此方法中只有前三行对这个问题很重要。但是console.log显示 newFKSchema是空的。如果我选择另一个选项,newFKSchema 将包含以前的选项。所以会有一圈延迟。我不明白为什么会发生这种情况以及如何让它像我想要的那样工作。抱歉代码困惑,我已经做了一些尝试让它工作。

如果对您来说不难,请在提供解决方案后稍微解释一下。

  const allSchemas = [
'',
'ADDITIONAL',
'BOOKKEEPING',
'CB',
'DEPOSIT',
'DOGORG',
'GENERALUSE',
'NSI',
'PAYMENTS',
'PLASTIC',
'SAFECELL',
'SWIFT',
'TARIFF',
];
const [newFKSchema, setNewFKSchema] = React.useState(allSchemas[0]);

const getTables = (schema) => {
var newSchema = schema;
setNewFKSchema(newSchema);
console.log(newFKSchema);

if (newFKSchema !== '') {
superagent
.get('/api/tech')
.query({schema: schema})
.then((response) =>{
if (response.status === 200) {
const newTables = [];
response.body.forEach(e => {newTables.push(e)});
setAllTables(newTables);
}
})
.catch(error => {
if (error.response.statusCode === 400) {
alert("No tables were found!");
}
});
}
}

<FormControl fullWidth>
<Autocomplete
id="autocomplete-schema"
options={allSchemas.slice(1)}
value={newFKSchema}
onChange={(event, value) => {setNewFKSchemaError(false); getTables(value)}} //setNewFKSchema(value);
renderInput={(params) => <TextField {...params} label="Schema name" variant="outlined" fullWidth />} />
<FormHelperText className={classes.formHelper}>
{newFKSchemaError ? "Needs input!" : ''}
</FormHelperText>
</FormControl>

最佳答案

好的,让我们来看看这里发生了什么:

您调用getTables(value)onChange触发器,参数 eventvalue .
value设置为 newFKSchema ,您将其定义为 allSchemas[0] ,即 ''
然后你这样做:

const getTables = (schema) => {
var newSchema = schema;
setNewFKSchema(newSchema);
console.log(newFKSchema);

我们知道架构是 '' .所以 newSchema 也将是 '' setNewFKSchema 会将模式设置为 ''同样,显然控制台日志也会记录 ''
那么,您期望会发生什么?

关于javascript - React Hook 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61986042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com