undefined 不是对象(评估“sound.loadAsync”)- React Native
Posted
技术标签:
【中文标题】undefined 不是对象(评估“sound.loadAsync”)- React Native【英文标题】:undefined is not an object (evaluating 'sound.loadAsync')- React Native 【发布时间】:2022-01-23 07:26:35 【问题描述】:您好,我正在创建一个简单的反应原生音频系统,我正在尝试从多个小时开始调试。
我已经从 react-native-audio 尝试过,但这不起作用,它给了我RN.Sound>Isandroid
错误,我正在使用 expo cli,它的 expo-av 给了我这个undefined is not an object (evaluating 'sound.loadAsync')
错误,这是我的代码:
import Audio from 'expo-av';
let [sound, setSound] = useState();
useEffect(()=>
Audio.setAudioModeAsync(
allowsRecordingios:false,
interruptionModeIOS:Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,
playsInSilentModeIOS:true,
interruptionModeAndroid:Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
shouldDuckAndroid:true,
staysActiveInBackground:true,
playThroughEarpieceAndroid:true
);
)
setSound(new Audio.Sound());
let [status,setStatus] = useState(false);
sound.loadAsync(require('../../Images/we.wav'), status, false);
const listen =async () =>
sound.playAsync();
【问题讨论】:
【参考方案1】:问题是因为setState
是一个异步函数。所以setSound(new Audio.Sound());
会在sound.loadAsync(require('../../Images/we.wav'), status, false);
之后运行,所以那个时候sound
是未定义的。
如何解决:
-
关注Expo AV documentation(推荐)
如果你真的想在 useEffect 之外运行你的代码,试试这个:
const _sound = new Audio.Sound();
_sound.loadAsync(require('../../Images/we.wav'), status, false);
setSound(_sound);
【讨论】:
以上是关于undefined 不是对象(评估“sound.loadAsync”)- React Native的主要内容,如果未能解决你的问题,请参考以下文章
React native - undefined 不是一个对象('评估 this.props.navigation')
undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)
TypeError undefined 不是对象(评估'e.props.onChangeToken')
undefined不是对象(评估'_effects.buffers.expanding')