Axios API получает запрос с Redux, который не может передать переменную в действии

Я пытаюсь передать переменную в запрос axios в своем действии:

export function searchRequest(search){
    return(dispatch)=>{
        console.log('in search', search)
        return axios.get(`http://localhost:4000/reports/${search}`)
                .then(response => {

                    dispatch(searchInfo(response.data))
                })
    }
}

Когда я консоль поиска по журналу, он не регистрируется.

Однако, когда я удаляю данные return dispatch и console log response.data в .then, я получаю желаемые данные, но не могу использовать отправку.

Спрашивается, почему я не могу пройти в поиске таким способом?

Изменить: это реагирует на родной


person schoenbl    schedule 21.05.2019    source источник


Ответы (1)


Я не уверен, как вы подключаете эту функцию к Redux в React-native, но я думаю, что она работает так же, как вы делаете это с обычным React. Функция searchRequest возвращает новую функцию с одной переменной dispatch. search будет "статическим" со значением, которое вы передали при вызове searchRequest, поэтому, вероятно, null или undefined или какое-то жестко запрограммированное значение. Вам следует сделать наоборот:

import {connect} from 'react-redux'

const searchRequest = (dispatch) => {
   return async (search) => {
      const response = await axios.get(`http://localhost:4000/reports/${search}`)
      dispatch(searchInfo(response.data))
   }
}

class YourComponent extends Component {
....
  onSearch = (search) => {
     this.props.doSearch(search)
  }
....
}

const mapDispatch = (dispatch) => ({
  doSearch: searchRequest(dispatch)
})

export connect(null, mapDispatch)(YourComponent)

Вот так это выглядит с "нормальной паутиной" -React. Может в родном выглядит иначе. Обратите внимание, что отправка предоставляется как параметр один раз. Впоследствии при вызове doSearch внутри функции используется тот же экземпляр диспетчеризации.

person Auskennfuchs    schedule 21.05.2019