在我的App.js中,我有以下内容:
const(sound,SetSound) = useState('beep');
function playSound() {
console.log(sound); // displays beep if called from childComponent and 'honk' if called from App.js
}
return (
<Childcomponent
sound={sound}
setSound={setSound}
playSound={playSound}
/>
...
在我的ChildComponent中,我执行以下操作:
props.setSound('honk');
//Later by button click:
props.playSound();
不是按喇叭而是哔哔声。我错过了什么?
在app.js中,我按下“a”键调用playSound()。当我这样做时,它会在childComponent更新后发出喇叭声。但不知何故,props.playSound()过时了。如果我在childComponent中显示{sound},它会显示更新后的“喇叭声”。
我试过“绑定”
playSound={()=〉playSound()}但它仍然发出哔哔声而不是喇叭声。
如何从ChildComponent按喇叭?
2条答案
按热度按时间i7uaboj41#
你的
playSound()
函数看起来是什么样的?看起来playSound()
仍然使用sound
的旧状态。在App.js中,我会将该值传递给
playSound
函数,以便它使用sound
的正确更新值:zaqlnxep2#
一旦你用
'honk'
值调用setSound
,它就不能在同一个tick中被playSound
使用,你必须等待下一个渲染周期,然后再调用props.playSound()
或者你可以这样做