Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在redux状态下更好地构建数据?_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 如何在redux状态下更好地构建数据?

Javascript 如何在redux状态下更好地构建数据?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我是新手,所以这可能是一个非常初级的问题,但我希望对于优秀的人来说,可能有一个解决方案 songData()此处返回大量歌曲对象的数组 这就是为什么[0]在currentSong:{currentSongData:songData()[0]}, 这是我的redux状态: const initState = { allSongs: songData(), currentSong: { currentSongData: songData()[0] }, isPlaying: false,

我是新手,所以这可能是一个非常初级的问题,但我希望对于优秀的人来说,可能有一个解决方案

songData()
此处返回大量歌曲对象的数组

这就是为什么
[0]
currentSong:{currentSongData:songData()[0]},

这是我的redux状态:

const initState = {
  allSongs: songData(),
  currentSong: { currentSongData: songData()[0] },
  isPlaying: false,
  isLibraryOpen: false,
  songTimer: [
    {
      currentTime: 0,
      duration: 0,
    },
  ],
};
每当我必须访问当前歌曲中的任何内容时,我都必须编写如下内容:

currentSong.currentSongData.name
或者,如果我将currentSong定义为
currentSong:[songData()[0]],
则类似:

currentSong[0].name 
有没有更好的方法来定义redux状态,在那里我访问数据时不必写这么长的东西

我想通过书写来访问它

currentSong.name
顺便说一句,这是歌曲对象的结构

      {
        name: 'Cold Outside',
        cover: 'https://chillhop.com/wp-content/uploads/2020/09/09fb436604242df99f84b9f359acb046e40d2e9e-1024x1024.jpg',
        artist: 'Nymano',
      },

可以使用属性扩展表示法

currentSong: { ...songData()[0] }

我倾向于存储currentSong的密钥id,您可以从
所有歌曲中提取其数据内容。否则,您将复制数据—这是您最好避免的。这样,在初始状态下,您将拥有
currentSongId:songData()[0]。id

那么,在你的活动中,你会如何处理这些问题呢?你可以用。此功能允许您过滤数据,以便正确使用数据。在您的功能组件中,您可以提取如下内容:

// at your component function
const selectedSong = useSelector(state => state.allSongs.filter(({ id }) => id === state.currentSongId))

如果您在useSelector docs上进一步阅读以下内容,您可以更进一步,将其值记录下来,以避免与另一个库组合使用时出现不必要的重播。

我建议:currentSong:songData()[0]我同意,这会更好)@AlekseyPolonkaAlex我第一次这样做了。但是我在上面提到,我必须编写
currentSong[0]。name
才能访问name@Ilyas这一个确实有效。最好将songData()结果写入一个变量,以避免不必要的重新运行