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