Поставить запрос получить ID | Аксиос, Реакт, Редукс

Я хочу сделать запрос PUT на свой сервер, но для этого мне нужен идентификатор для конкретного объекта, который мне нужно обновить. И это моя проблема, я не знаю, как получить идентификатор компонентов, чтобы я мог выполнить свой запрос PUT. Вот код на данный момент:

import axios from 'axios'
import settings from '../../../../settings'

axios.defaults.baseURL = settings.hostname

export const updateSettings = function(id, item) {
  return dispatch => {
    axios
      .put(`${settings.hostname}/locks/${id}`, item)
      .then(res => res.data)
      .catch(err => console.log(err))
  }
}

Когда console.log item, я вижу все новые вещи, которые я ввел в свои поля ввода (вещи, которые я хочу изменить), но я также получаю это: введите здесь описание изображения

А иногда 404. Итак, мой вопрос в том, как я могу получить идентификатор, чтобы я мог сделать этот запрос на размещение. Спасибо.

Здесь я вызываю updateSettings:

import React, { Component } from 'react'
import { updateSettings } from './redux/actions/updateSettingsAction'
import DoorSettingsForm from './components/doorsSettingsForm'
import { connect } from 'react-redux'

class DoorSettingsContainer extends Component {
  submit(values) {
    this.props.updateSettings(values)
  }

  render() {
    return (
      <div>
        <DoorSettingsForm
          onSubmit={this.submit.bind(this)}
          item={this.props.location.state.item}
        />
      </div>
    )
  }
}

function mapStateToProps(state) {
  return { data: state.data }
}

export default connect(mapStateToProps, { updateSettings })(
  DoorSettingsContainer
)

person Martin Nordström    schedule 06.08.2017    source источник
comment
Как вы называете updateSettings? Похоже, вы передаете объект, а не просто примитив.   -  person Balázs Édes    schedule 07.08.2017
comment
Я добавил немного кода.   -  person Martin Nordström    schedule 07.08.2017
comment
как выглядит объект значений?   -  person canaan seaton    schedule 07.08.2017


Ответы (2)


Вы пропустили идентификатор функции updateSettings()

посмотрите на эту строку: export const updateSettings = function(id, item) {};

а затем строка, где вы это называете:

submit(values) {
    this.props.updateSettings(values)
}

ваш предмет - это ваш идентификатор здесь, и предмет нигде не найден, я думаю, что это то, откуда вы получаете большинство своих проблем, по крайней мере, на данный момент.

person Lucas Reppe Welander    schedule 06.08.2017

В настоящее время вы передаете объект события, полученный обработчиком onSubmit, методу updateSettings.

Имейте в виду, что в вашем обработчике событий у вас есть доступ как к state, так и к props:

submit() {
  // this comes from the redux binding
  const { data } = this.props
  // this is local state, not sure what else of interest is in there
  const item = this.state.location.item

  // Just a guess, inspect your data to see what's appropriate here.
  this.props.updateSettings(data.id, item)
}

Проверьте свои данные, вам, вероятно, потребуется доступ к data.id или item.id, чтобы получить правильный идентификатор, который нужен updateSettings.

Также обратите внимание, что если вы отправляете асинхронные действия таким образом, то в зависимости от того, какое промежуточное ПО вы используете, вам, вероятно, придется вызывать dispatch при поступлении асинхронных данных (например, где вы можете получить доступ к res.data).

person Balázs Édes    schedule 06.08.2017