javascript - rick & morty api 问题,请求带有 id 的字符
问题描述
我想提出关于 api rick and morty 的请求。要获取角色的详细信息,您必须指定一个 id 作为参数:“ https://rickandmortyapi.com/api/character/id ”
我使用 redux-saga 来获取我的请求,但请求失败并显示一条消息: “嘿!不允许使用该参数,请尝试使用数字代替;)”
我用组件中收到的 id 尝试了请求,请求有效。我认为它要么来自我的行动,要么来自我的传奇......
这是我的行动:
export const getCharactersDetails = () => {
return { type: GET_CHARACTER_DETAILS }
}
这是我的传奇:
const getLatestDetails = (id) =>
fetch('https://rickandmortyapi.com/api/character/' + id);
export function* fetchCharacterDetails() {
try {
let myCharacter;
const response = yield call(getLatestDetails);
const result = yield response.json();
if (result.error) {
yield put({ type: DETAILS_REQUEST_FAILED, error: result.error });
} else {
myCharacters = result.results
yield put({ type: DETAILS_RECEIVED, character: myCharacter });
}
} catch (error) {
yield put({ type: DETAILS_REQUEST_FAILED, error: error.message });
}
}
function* actionWatcher() {
yield takeLatest(GET_CHARACTERS, fetchCharacters)
yield takeLatest(GET_CHARACTER_DETAILS, fetchCharacterDetails)
}
我这样称呼我的行动:
let CharacterId = this.props.navigation.state.params.id
this.props.dispatch(getCharactersDetails(CharacterId))
知道我做错了什么吗?
解决方案
您没有将任何 ID 传递给您的getLatestDetails
函数。
将 ID 添加到您正在创建的操作中:
export const getCharactersDetails = id => {
return { type: GET_CHARACTER_DETAILS, id }
}
…然后将操作中的 ID 作为参数添加到您的 saga 并将其作为第二个参数传递给您的call
效果:
export function* fetchCharacterDetails({ id }) {
try {
let myCharacter;
const response = yield call(getLatestDetails, id);
const result = response.json();
if (result.error) {
yield put({ type: DETAILS_REQUEST_FAILED, error: result.error });
} else {
myCharacters = result.results
yield put({ type: DETAILS_RECEIVED, character: myCharacter });
}
} catch (error) {
yield put({ type: DETAILS_REQUEST_FAILED, error: error.message });
}
}
补充说明:
- 传奇将行动作为论据;我们在这里使用解构来获取 ID(注意花括号)
call
接受要调用的函数作为第一个参数,然后是传递给函数的附加参数,这就是getLatestDetails
获取 ID 的方式yield
我之前删除了response.json()
,这只是一个普通的旧同步操作
推荐阅读
- ruby-on-rails - 使用 eval 运行 ruby 代码,它是 gems,rails
- git - 如何从分支获取所有提交并放入单个提交
- python - 如何将 Schedule 转换为 APScheduler 模块?
- java - 对我的对象数组列表进行选择排序不起作用 JAVA
- ionic-framework - IonicFramework - 在 iOS 上以全屏模式停止视频自动播放
- angular - 从另一个目录调用 angular build
- bash - 如何从 git 挂钩中可靠地找到根 git 目录?
- regex - 嵌套括号内的 grep
- javascript - XMLHttpRequest 的 readystatechange 事件在当前脚本结束前触发
- go - golang溢出int64直接操作但没有事先赋值?