慕絲7291255
2022-11-03 10:10:40
我當(dāng)前的功能組件要求我在運(yùn)行嵌套的 if 語(yǔ)句之前按兩次按鈕。根據(jù)我目前的理解,任何狀態(tài)變化都會(huì)重新渲染整個(gè)組件,所以我相信這就是阻止 if 語(yǔ)句立即運(yùn)行的原因。如果這是問(wèn)題,我仍然不確定如何解決它。const [ inputData, setInputData ] = useState("Botany") // Example of stateconst [ lockInputData, setLockInputData ] = useState("")const [ prevLockInputData, setPrevLockInputData ] = useState("")// Button element propinputDataSubmit={ () => submitData(inputData) } // On button press this will be called.const submitData = async (inputData) => {setLockInputData(inputData); if (lockInputData !== "" && lockInputData !== prevLockInputData) { await newCat(inputData.replace(/[" "]/g, "_")); setPrevLockInputData(lockInputData); } else if (lockInputData !== "" && lockInputData === prevLockInputData) { await newSubCat(inputData.replace(/[" "]/g, "_")); }}使用 inputDataSubmit 的組件位:<form onSubmit={ () => false}> <input action="" type="text" placeholder="Category" value={props.inputData} onChange={props.handleChange} /> <button type="button" onClick={props.inputDataSubmit} > Random </button></form>隨時(shí)提供有關(guān)編碼最佳實(shí)踐的建議。
1 回答

烙印99
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
我認(rèn)為因?yàn)閟etState可能是異步的(并且setLockInputData是 a setState)。
你可以試試:
const submitData = async (inputData) => {
setLockInputData(inputData);
if(inputData !== "") {
if(inputData !== prevLockInputData) {
await newCat(inputData.replace(/[" "]/g, "_"));
setPrevLockInputData(inputData);
}
else
await newSubCat(inputData.replace(/[" "]/g, "_"));
}
}
希望這可以幫助。
添加回答
舉報(bào)
0/150
提交
取消