Javascript 李嘉诚;对id为的字符的请求存在morty api问题

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 } }

我想提出一个关于api rick和morty的请求。要获取字符的详细信息,必须指定一个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))

你知道我做得不对吗?

你没有向你的
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
    接受要调用的函数作为第一个参数,然后是传递给函数的附加参数,这就是
    getLatestDetails
    获取ID的方式
  • 我在
    response.json()之前删除了
    yield
    ,这只是一个普通的旧同步操作

您没有将任何ID传递给您的
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
    接受要调用的函数作为第一个参数,然后是传递给函数的附加参数,这就是
    getLatestDetails
    获取ID的方式
  • 我在
    response.json()之前删除了
    yield
    ,这只是一个普通的旧同步操作

太好了,谢谢。我无法将此id传递到我的:最新(GET\u CHARACTER\u DETAILS,fetchCharacterDetails)中?因为现在请求已通过,但字符未定义:{type:“DETAILS_RECEIVED”,characters:undefined,@@redsaga/SAGA_ACTION:true}
takeLatest
将传入的操作传递到SAGA的参数列表。所以这部分现在是正确的。我认为问题在于你传递的是
字符
,但是你收到的
详细信息
操作需要
字符
(复数)而且,没有必要在
响应之前加上
屈服
,这只是一个普通的老同步操作,谢谢。我无法将此id传递到我的:最新(GET\u CHARACTER\u DETAILS,fetchCharacterDetails)中?因为现在请求已通过,但字符未定义:{type:“DETAILS_RECEIVED”,characters:undefined,@@redsaga/SAGA_ACTION:true}
takeLatest
将传入的操作传递到SAGA的参数列表。所以这部分现在是正确的。我认为问题在于你传递的是
字符
,但是你收到的
细节
操作需要
字符
(复数)而且,没有必要在
响应之前加上
产量
,这只是一个普通的老同步操作