我的代碼有問題,基本上 setRevalue 總是一鍵延遲。
const Exchanger = () => {
const [revalue, setRevalue] = useState('null')
const [valueOfInput, setValueOfInput] = useState('');
const [valueOfSelect, setValueOfSelect] = useState('');
const handleClick = () => {
switch (valueOfSelect) {
case 'option_1':
axios.get('http://api.nbp.pl/api/exchangerates/rates/a/chf/?format=json')
.then((response) => {
setRevalue(response.data.rates[0].mid)
console.log(revalue);
})
break;
const handleInputChange = (event) => {
setValueOfInput(event.target.value);
}
const handleSelectChange = (event) => {
setValueOfSelect(event.target.value);
}
return(
<>
<Input
labelText= 'Amount'
onChange= { handleInputChange }
value = { valueOfInput }
/>
<Select selectValue={ valueOfSelect } onSelectChange={ handleSelectChange } />
<Button onClick={handleClick}>Klik!</Button>
</>
)
在第一次單擊時,它會回傳一個 null,它應該是在單擊之前。任何幫助將非常感激。
uj5u.com熱心網友回復:
如果你想在設定后立即訪問revalue,你必須使用 useEffect 和 revalue作為引數,它會是這樣的
useEffect(()=>{
console.log(revalue);
},[revalue])
現在每次重估更改時,您都會得到當前結果
uj5u.com熱心網友回復:
嘿,所以你有一個閉塞問題
在 JavaScript 中,每次創建函式時都會在創建函式時創建閉包。
在.then()創建函式時,revalue具有最后一次渲染的值,這就是為什么即使在使用更新狀態setRevalue(并因此觸發重新渲染)之后,您也會獲得“舊值”(與.then函式所在的渲染相對應的值)已創建)。
我不確切知道您的用例,但似乎您可以通過以下方式實作您想要實作的目標:
const revalue = response.data.rates[0].mid
setRevalue(revalue)
console.log(revalue);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/412528.html
標籤:
