API Axios получает запрос, Redux не может передать переменную в действии - PullRequest
2 голосов
/ 21 мая 2019

Я пытаюсь передать переменную в запрос 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))
                })
    }
}

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

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

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

Редактировать: это в реагировать родной

1 Ответ

0 голосов
/ 22 мая 2019

Я не уверен, как вы подключаете эту функцию к 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...