我想提出关于api rick和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))
知道我在做什么不对吗?
答案 0 :(得分:2)
您没有将任何ID传递给getLatestDetails
函数。
将ID添加到您要创建的操作中:
export const getCharactersDetails = id => {
return { type: GET_CHARACTER_DETAILS, id }
}
...然后将动作的ID作为参数添加到您的传奇中,并将其作为第二个参数传递给您的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 });
}
}
其他说明:
call
接受将函数称为第一个参数,然后再将其他参数传递给该函数,这就是getLatestDetails
如何获取ID的方法yield
之前删除了response.json()
,这只是普通的同步操作