reactjs - React/Redux - 将变量传递给动作
问题描述
我是 Redux 的新手,正在使用 Spotify API 进行项目。我正在发送 API 调用并检索有关当前播放歌曲的数据。
我有一个单独的 Redux 操作,它试图从当前播放的艺术家那里获取其他专辑。在我的 App.js 中,我可以通过以下方式访问艺术家的 IDconst id = this.props.currentlyPlaying.id
我想将此变量从 App.js 传递给我的专辑操作。该操作包含 API 调用,如下所示:
import SpotifyWebApi from 'spotify-web-api-js';
import {id} from '../App.js';
const spotifyApi = new SpotifyWebApi();
export function fetchAlbums() {
return function(dispatch) {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST"});
//'43ZHCT0cAZBISjO8DG9PnE'
spotifyApi.getArtistAlbums(id)
.then((response) => {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST_FULFILLED", payload: response})
})
.catch((err) => {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST_REJECTED", payload: err})
});
}
}
我尝试导入 id 变量,但出现错误。将变量从组件传递到 Redux 操作的正确方法是什么?我还尝试通过 this.props 直接在操作中访问 id,这也不起作用。
解决方案
不要尝试导入 id,在调用fetchAlbums
操作时将其作为参数传递。
就像是:
行动:
export const fetchAlbums = (id) => async dispatch => {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST"});
//'43ZHCT0cAZBISjO8DG9PnE'
spotifyApi.getArtistAlbums(id)
.then((response) => {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST_FULFILLED", payload: response})
})
.catch((err) => {
dispatch({ type: "FETCH_ALBUMS_BY_ARTIST_REJECTED", payload: err})
});
}
使用动作:
这将绑定一个函数来调用该fetchAlbums
函数,允许您传递参数而不是click
事件。
<button onClick={() => fetchAlbums(id)}>Fetch Album</button>
推荐阅读
- r - ggplot2 使用时压缩标签和数据:scale_x_discrete(limit = c())
- ios - 如何使用 HealthKit 睡眠查询区分来源
- java - 如何修改一个类的 BeanInfo(由 jaxb xjc 生成)?
- eclipse - Cucumber .feature 文件未链接到 Eclipse 中的 stepDefinition.java
- python - 使用 2 列数据创建 4 个新的 csv 列
- string - 将 String 转换为参数类型 File Flutter
- c++ - 线程共享变量是直接访问的吗?
- java - Retrieve multiple elements in an ArrayList that are closest to an integer
- python - python colorama 打印所有颜色
- flutter - Flutter - 从 FCM 收到通知时自动运行应用程序(无需单击它)