Reactjs 如何停止获取与Redux一起使用的用户媒体

Reactjs 如何停止获取与Redux一起使用的用户媒体,reactjs,redux,react-redux,getusermedia,Reactjs,Redux,React Redux,Getusermedia,我正在用Redux使用navigator.mediaDevices.getUserMedia(mediaConstraints),但我找不到停止媒体流的方法 我已经尝试在reducer和action中停止媒体流 在我看来,我试过了 case actionTypes.GET\u USER\u MEDIA\u CLOSE: 返回{ ……国家, 流:{ …state.stream, 活动:错误 } }; 同样在减速器中 export const getUserMediaClose=()=>{ 返回(

我正在用Redux使用
navigator.mediaDevices.getUserMedia(mediaConstraints)
,但我找不到停止媒体流的方法

我已经尝试在reducer和action中停止媒体流

在我看来,我试过了

case actionTypes.GET\u USER\u MEDIA\u CLOSE:
返回{
……国家,
流:{
…state.stream,
活动:错误
}
};
同样在减速器中

export const getUserMediaClose=()=>{
返回(调度,获取状态)=>{
let track=getState().videoCall.stream.getTracks()[0];
track.stop();
}
}
有没有办法用Redux停止用户相机流?

可能会改变

export const getUserMediaClose = () => {
    return (dispatch, getState) => {
        let track = getState().videoCall.stream.getTracks()[0];
        track.stop();
    }
}

如果看不到更多代码,就很难知道(例如,您是如何存储流对象的,是有n个流对象还是只有1个?)。可能存在一种情况,即您对另一个未正确存储的流对象的引用。为了调试它,我将创建一个window.streams数组,每次创建一个新流时,我都会将它推送到该数组(可能带有时间戳或某个唯一ID),以确保您只有一个流,并且该流与存储中的流相同。您可以通过控制台输入“window.streams”进行调试,并可以检查对象

也许会改变

export const getUserMediaClose = () => {
    return (dispatch, getState) => {
        let track = getState().videoCall.stream.getTracks()[0];
        track.stop();
    }
}

如果看不到更多代码,就很难知道(例如,您是如何存储流对象的,是有n个流对象还是只有1个?)。可能存在一种情况,即您对另一个未正确存储的流对象的引用。为了调试它,我将创建一个window.streams数组,每次创建一个新流时,我都会将它推送到该数组(可能带有时间戳或某个唯一ID),以确保您只有一个流,并且该流与存储中的流相同。您可以通过控制台输入“window.streams”进行调试,并可以检查对象