Javascript 李嘉诚;对id为的字符的请求存在morty api问题
我想提出一个关于api rick和morty的请求。要获取字符的详细信息,必须指定一个id作为参数:“ 我使用redux saga获取请求,但请求失败,并显示一条消息: “嘿!不允许使用该参数,请尝试使用数字;)” 我用组件中收到的id尝试了请求,请求有效。我想它要么来自我的行动,要么来自我的传奇 以下是我的行动:Javascript 李嘉诚;对id为的字符的请求存在morty api问题,javascript,redux-saga,Javascript,Redux Saga,我想提出一个关于api rick和morty的请求。要获取字符的详细信息,必须指定一个id作为参数:“ 我使用redux saga获取请求,但请求失败,并显示一条消息: “嘿!不允许使用该参数,请尝试使用数字;)” 我用组件中收到的id尝试了请求,请求有效。我想它要么来自我的行动,要么来自我的传奇 以下是我的行动: export const getCharactersDetails = () => { return { type: GET_CHARACTER_DETAILS } }
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))
你知道我做得不对吗?你没有向你的
getLatestDetails
函数传递任何ID
将ID添加到正在创建的操作:
export const getCharactersDetails = id => {
return { type: GET_CHARACTER_DETAILS, id }
}
…然后将动作中的ID作为参数添加到您的传奇中,并将其作为第二个参数传递给您的调用
效果:
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
获取ID的方式getLatestDetails
- 我在
response.json()之前删除了
,这只是一个普通的旧同步操作yield
getLatestDetails
函数
将ID添加到正在创建的操作:
export const getCharactersDetails = id => {
return { type: GET_CHARACTER_DETAILS, id }
}
…然后将动作中的ID作为参数添加到您的传奇中,并将其作为第二个参数传递给您的调用
效果:
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
获取ID的方式getLatestDetails
- 我在
response.json()之前删除了
,这只是一个普通的旧同步操作yield
takeLatest
将传入的操作传递到SAGA的参数列表。所以这部分现在是正确的。我认为问题在于你传递的是字符
,但是你收到的详细信息
操作需要字符
(复数)而且,没有必要在响应之前加上屈服
,这只是一个普通的老同步操作,谢谢。我无法将此id传递到我的:最新(GET\u CHARACTER\u DETAILS,fetchCharacterDetails)中?因为现在请求已通过,但字符未定义:{type:“DETAILS_RECEIVED”,characters:undefined,@@redsaga/SAGA_ACTION:true}takeLatest
将传入的操作传递到SAGA的参数列表。所以这部分现在是正确的。我认为问题在于你传递的是字符
,但是你收到的细节
操作需要字符
(复数)而且,没有必要在响应之前加上产量
,这只是一个普通的老同步操作