Доступ к данным json из API для внешнего интерфейса Reactjs

Я хочу создать приложение, которое напоминает вам об истечении срока действия вашей страховки, и я хочу получить доступ к данным из моей базы данных, чтобы создать форму редактирования и заполнить поля этими данными. У меня есть эта функция в InsurancesController:

public function edit($insurance)
{
    $insurance = Insurance::whereId($insurance)->first();

    return response() -> json([
        'insurance' => $insurance
    ]); 
}

У меня есть этот маршрут:

<Route path = "/:id/edit" exact render = {props => (
     <EditInsurance {...props} insurances = {this.state.insurances} />)}
 />

и у меня есть этот компонент, просто для тестирования:

import React, { Component } from "react";

class EditInsurances extends Component {
  render() {
    const { insurances } = this.props;
    return (
      <div>
        <p>Hello</p>
        {insurances.map(insurance => (
          <p>{insurance.id}</p>
        ))}
      </div>
    );
  }
}

export default EditInsurances;

Как мне получить доступ только к той страховке, которую я хочу отредактировать?

Редактировать

Это то, что я получаю, когда использую почтальон для:

{
    "insurance": {
        "id": 5,
        "user_id": 1,
        "tip": "Asigurare",
        "date_exp": "1975-12-28",
        "date_notif": "2006-06-19",
        "note": "Vitae dolorem corporis impedit eligendi laborum quidem.",
        "created_at": "2019-03-11 09:49:23",
        "updated_at": "2019-03-11 09:49:23"
    }
}

Вы должны быть яснее в своих сомнениях. Разместите более подробную информацию.

Eduardo Junior 13.03.2019 10:59

Я хочу получить доступ к данным, которые я отправляю в контроллере (json), на мой маршрут редактирования

user11011546 13.03.2019 11:00

Можете ли вы опубликовать, какие данные вы отправляете по запросу?

Eduardo Junior 13.03.2019 11:02

Вот что я получаю, когда использую почтальона для: напоминания.test/api/insurances/5/edit: { "insurance": { "id": 5, "user_id": 1, "tip": "Asigurare", "date_exp": "1975-12-28", "date_notif": "2006-06-19", "note": "Vitae dolorem corporis impedit eligendi laborum quidem.", "created_at": "2019-03-11 09:49:23", "updated_at": "2019-03-11 09:49:23" } }

user11011546 13.03.2019 11:05

Я обновил пост, чтобы его было легче читать

user11011546 13.03.2019 11:07

попробуйте изменить метод edit() вашего контроллера на это: public function edit(Request $request) { $insurance_request = json_decode($request->get('insurance')); $insurance = Insurance::find($insurence_request->id); return response()->json($insurance) }

Eduardo Junior 13.03.2019 11:10

чтобы использовать приведенный выше код, убедитесь, что у вас есть use Illuminate\Http\Request в верхней части вашего контроллера.

Eduardo Junior 13.03.2019 11:13

Это единственное, что я должен изменить? Если да, то ничего не изменилось...

user11011546 13.03.2019 11:21

Теперь вы можете правильно получить доступ к данным, отправленным на контроллер, не так ли? Какой ответ показывает вам Почтальон?

Eduardo Junior 13.03.2019 11:25

Попытка получить свойство 'id' не объекта

user11011546 13.03.2019 11:31

Но данные, которые я получил от почтальона, в первую очередь были правильными.

user11011546 13.03.2019 11:32

О, извините, я думал, вы сомневаетесь в том, что не сможете получить данные на серверной части. Я испортил это.

Eduardo Junior 13.03.2019 11:34

Все в порядке, все равно спасибо. Любая помощь приветствуется: D

user11011546 13.03.2019 11:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
13
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете взять из маршрута ID страховки, которую хотите отредактировать.

Затем переберите все страховки и сравните с идентификатором из маршрута.

class EditInsurances extends Component {
  render() {
    const { insurances } = this.props;
    // get from url-route ID 
    const insuranceId = this.props.match.params.id;

    const insurance = insurances.map(insurance => insurance.id === insuranceId)

    return (
      <div>
        <p>Hello</p>
        {insurance}
      </div>
    );
  }
}

я понял: Line 8: 'insurances' is not defined no-undef

user11011546 13.03.2019 11:14

Вы должны получить от реквизита страховки, как это, верно? const {страховки} = this.props;

James Delaney 13.03.2019 11:15

Я обновил ответ с помощью const {insurances} = this.props; Попробуй сейчас.

James Delaney 13.03.2019 11:17

Теперь я не получаю никаких ошибок, но отображается только сообщение «Привет».

user11011546 13.03.2019 11:20

console.info('insuranceId', insuraceId) и console.info('insurances', Insurances) Консоль записывает их перед return() Чтобы проверить, получаем ли мы список страховок и как этот список выглядит. И если мы получим этот список. Нам нужно знать, есть ли у нас страховой идентификатор от «маршрута», возможно, это проблема. дайте мне знать, какую ценность вы получите.

James Delaney 13.03.2019 11:23

Я получаю все страховки, но для InsuranceId я получаю только {insuranceId}, а не число

user11011546 13.03.2019 11:25

можете ли вы записывать в консоль также this.props.match.params.id; и дайте мне знать, что вы получите

James Delaney 13.03.2019 11:32

Я думаю, что проблема на моей странице шоу. Чтобы попасть на страницу редактирования, у меня есть <Link>: <Link to = "/{insurance.id}/edit" className = "btn btn-sm btn-warning" > EDIT </Link>

user11011546 13.03.2019 11:49

Ладно, я понял. Ссылка была проблемой, вместо этого я должен был использовать <Link to = {"/" + Insurance.id + "/edit"} .... </ Link> Теперь я получаю нужный мне идентификатор, но отображение то же самое, только привет

user11011546 13.03.2019 12:41

Хорошо, это сработало, большое спасибо. У меня только одна проблема. Несмотря на то, что insurance.id и insuranceId имеют одинаковое значение, if не работает. Я сделал оператор if для проверки, и это возвращает false для каждого сравнения: const insurance = insurances.map(function(insurance) { if (insurance.id === insuranceId) return "true"; else return "false"; })

user11011546 13.03.2019 13:13

Другие вопросы по теме