如何在Redux中制作正确的搜索方法?

时间:2017-10-24 16:57:37

标签: javascript reactjs api redux fetch

我是Redux的新手,需要我的搜索帮助。

我需要使用一些api来获取搜索结果。这个api给了我以下端点:

POST /search/
GET /search/:id/results

所以我需要这样做:

  1. 使用我的搜索数据发布帖子请求
  2. 然后,当我收到回复时,我会采用特定的搜索ID
  3. 使用此ID发出获取请求以获取我的结果。
  4. 我试图通过以下方式获取结果:

    const FETCH_RESULTS_SUCCESS = 'FETCH_RESULTS_SUCCESS';
    
    const initialState = {
      results: []
    };
    
    export default function reducer(state = initialState, action) {
      switch (action.type) {
        case FETCH_RESULTS_SUCCESS:
            return Object.assign([], state, { results: action.results });
    
        default:
            return state;
      }
    }
    
    export const fetchResults = id => dispatch => {
      return
        fetch(`/search/${id}/results`, {
          method: 'get',
          'Content-Type': 'application/json'
        })
        .then(res => res.json())
        .then(results => {
          dispatch({
           type: FETCH_RESULTS_SUCCESS,
           results
          })
        })
    
    export const createSearch = data => dispatch => {
      return fetch('/search/', {
        method: 'post',
        body: JSON.stringify(data),
        headers: {
          'Content-Type': 'application/json'
        }
      })
      .then(res => res.json())
      .then(data => data.id)
      .then(id => dispatch(fetchResults(id)))
    }
    

    问题在于它给我空洞的结果。但是如果我把一些真正的搜索ID(假设我们之前在db中有搜索)这样dispatch(fetchResults(15)它会给我结果。

    为什么以这种方式传递id并不起作用?

    .then(data => data.id)
    .then(id => dispatch(fetchResults(id)))
    

    我的方法是否正常,或者您可能会建议我以其他方式使用此类API进行搜索?

    P.S。代码可能有一些错别字。

0 个答案:

没有答案