Reactjs 函数内部redux钩子的替换
我确实需要在下面的函数中有一个全局状态,但我得到了这个错误:Reactjs 函数内部redux钩子的替换,reactjs,react-hooks,Reactjs,React Hooks,我确实需要在下面的函数中有一个全局状态,但我得到了这个错误: 无效的钩子调用。钩子只能在函数组件的主体内部调用 是否有解决方法或其他解决方案 import useVoiceHook from '../../hooks/voicehook'; const Sound = require('react-native-sound'); function PlaySound(name) { const voicehook = useVoiceHook(); const voice = new
无效的钩子调用。钩子只能在函数组件的主体内部调用
是否有解决方法或其他解决方案
import useVoiceHook from '../../hooks/voicehook';
const Sound = require('react-native-sound');
function PlaySound(name) {
const voicehook = useVoiceHook();
const voice = new Sound(name, Sound.MAIN_BUNDLE, async (error) => {
if (error) {
console.warn('failed to load the sound', error);
return;
}
if (voicehook.data.lastVoice) {
voicehook.data.lastVoice.stop();
}
voicehook.setVoice(voice);
voice.play();
});
}
export default PlaySound;
由于您试图在事件上使用PlaySound函数,它会抛出错误,因为您无法在其中使用钩子。钩子用于功能组件中的顶级函数 有关更多详细信息,请查看 您应该将voicehook值作为参数传递给playSound函数并使用相同的参数
function MyComponent(props) {
const voicehook = useVoiceHook();
...
return (
<TouchableOpacity style={{backgroundColor: "red", padding: 20}} onPress={()=> {
PlaySound('click', voicehook)
}
}>
<Text>X</Text>
</TouchableOpacity>
)
}
function PlaySound(name, voicehook) {
const voice = new Sound(name, Sound.MAIN_BUNDLE, async (error) => {
if (error) {
console.warn('failed to load the sound', error);
return;
}
if (voicehook.data.lastVoice) {
voicehook.data.lastVoice.stop();
}
voicehook.setVoice(voice);
voice.play();
});
}
export default PlaySound;
功能MyComponent(道具){
const voicehook=useVoiceHook();
...
返回(
{
播放声音('点击',voicehook)
}
}>
X
)
}
函数PlaySound(名称、voicehook){
const voice=新声音(名称,Sound.MAIN\u BUNDLE,异步(错误)=>{
如果(错误){
console.warn('加载声音失败',错误);
返回;
}
if(voicehook.data.lastVoice){
voicehook.data.lastVoice.stop();
}
voicehook.setVoice(语音);
声音。播放();
});
}
导出默认播放声音;
PlaySound是如何使用的?在其他函数或类似onPress={()=>PlaySound('click')中@ShubhamKhatriI会研究voiceHook的实现,看看里面有什么神奇的酱汁。“我无法想象为什么一开始播放一个声音就需要成为一个钩子。@马丁,因为我需要在播放一个新的声音时阻止其他声音one@Martin另外,正如标题所说,我正在寻找替代品。如果可以的话,我会首先使用一个组件来代替PlayVoice功能:(您只需要按照我在示例中所示的方式更新实现。在已定义onPress事件处理程序的组件中使用useVoice钩子,并将voiceHook值作为param传递