Javascript 您试图在对象上设置键,该对象是不可变的,并且已在React Native中冻结

Javascript 您试图在对象上设置键,该对象是不可变的,并且已在React Native中冻结,javascript,react-native,Javascript,React Native,我正在构建一个音乐播放器,我正在实现随机性。我想这很容易,但是当我将“随机性”设置为false时,当我设置默认播放列表时出现了这个错误 第一个函数是request,这里我设置跟踪从用户检索到的默认轨迹,然后调用init_函数 requestPermission = async () => { try { const permission = await PermissionsAndroid.requestMultiple( [

我正在构建一个音乐播放器,我正在实现随机性。我想这很容易,但是当我将“随机性”设置为false时,当我设置默认播放列表时出现了这个错误

第一个函数是request,这里我设置跟踪从用户检索到的默认轨迹,然后调用init_函数

 requestPermission = async () => {

    try {

        const permission = await PermissionsAndroid.requestMultiple(
            [
                PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
                PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
            ],
        );

        if (permission["android.permission.READ_EXTERNAL_STORAGE"] === PermissionsAndroid.RESULTS.GRANTED && permission["android.permission.WRITE_EXTERNAL_STORAGE"] === PermissionsAndroid.RESULTS.GRANTED) {
            try {
                let tracks = [];
                let tracks_object = []; 
                tracks = await MusicFiles.getAll({
                    cover: true,
                });
                for (i = 0 ; i < tracks.results.length ; i++) {
                    tracks_object.push(new Tracks_info(tracks.results[i]));
                }
                this.setState({tracks: tracks_object}, () => this.init_player());
            }catch(error) {
                alert(error);
            }
        }else {
            this.requestPermission();
        }
    
    }catch (error) {
        alert(error)
    }
};
我有一个按钮,通过将其设置为false或true来激活random,有两个功能:

random = async () => {
    this.random_tracks = !this.random_tracks;
    this.change_queue();
}

change_queue = async () => {
    
    if (this.random_tracks) {
        console.log("creando un nuevo random");
        let random_tracks = this.random_queue();
        await TrackPlayer.removeUpcomingTracks();
        await TrackPlayer.add(random_tracks);
        this.setState({random_tracks: random_tracks});
    }else {
        console.log("asignando la lista por defecto");
        let default_tracks = this.state.tracks.map((tracks) => {
            let tracks_copy = {...tracks};
            if (tracks_copy.id === tracks.id) {
                return {...tracks_copy};
            }
        });
        await TrackPlayer.removeUpcomingTracks();
        await TrackPlayer.add(default_tracks);
        this.setState({tracks: default_tracks});
    }
}
如您所见,一旦我设置了
random\u track
我运行函数
change\u queue
,如果random为true,我将创建一个新的随机队列,删除所有的UpComingtrack并添加它,如果不是,则添加默认队列。但是,当我点击下一首歌曲时,它会一直工作到第四首歌曲,它会向我抛出错误:

我映射默认列表并再次设置,但没有解决问题

random = async () => {
    this.random_tracks = !this.random_tracks;
    this.change_queue();
}

change_queue = async () => {
    
    if (this.random_tracks) {
        console.log("creando un nuevo random");
        let random_tracks = this.random_queue();
        await TrackPlayer.removeUpcomingTracks();
        await TrackPlayer.add(random_tracks);
        this.setState({random_tracks: random_tracks});
    }else {
        console.log("asignando la lista por defecto");
        let default_tracks = this.state.tracks.map((tracks) => {
            let tracks_copy = {...tracks};
            if (tracks_copy.id === tracks.id) {
                return {...tracks_copy};
            }
        });
        await TrackPlayer.removeUpcomingTracks();
        await TrackPlayer.add(default_tracks);
        this.setState({tracks: default_tracks});
    }
}