как обновить компонент в React JS

Я использую React js, есть переменная в App.js файл называется Persons. Я хочуPersons значение будет обновляться каждый раз, когда я нажимаю на кнопку.

import React from "react";
import "./styles.css";
import Button from "@material-ui/core/Button";
import EleventHeaderCard from "./ElevatedHeaderCard";
import axios from "axios";

export let persons = [
  {
    id: 9,
    email: "michael.lawson@reqres.in",
    first_name: "Michael",
    last_name: "Lawson",
    avatar: "https://s3.amazonaws.com/uifaces/faces/twitter/follettkyle/128.jpg"
  },
  {
    id: 10,
    email: "lindsay.ferguson@reqres.in",
    first_name: "Lindsay",
    last_name: "Ferguson",
    avatar: "https://s3.amazonaws.com/uifaces/faces/twitter/araa3185/128.jpg"
  }
];

const handleClick = () => {
  return axios.get(`https://reqres.in/api/users?page=2`).then(res => {
    persons = res.data.data;
    console.log(persons);
  });
};

export default function App() {
  return (
    <div className="App">
      <Button color="primary" type="Submit" onClick={handleClick}>
        click me !!!
      </Button>
      <EleventHeaderCard />
    </div>
  );
}

Здесь вы можете увидеть мои коды

2 ответа

Решение

Логика, используемая для передачи данных в подкомпонент, неверна, вы должны передать ее как реквизиты вместо импорта внутри подкомпонента

Также для повторной визуализации каждого запроса вы должны использовать хук useState, который возвращает массив yourValue и его метод установки

так что используйте внутри функции приложения

let [persons, setPersons] = useState(initialData);

а затем в результате axios установить людей, использующих setPersons функция

и в вашем EleventHeaderCard coponent передать человека как подпорку.

увидеть эту рабочую ручку

Используйте хук useState. Он будет повторно отображать компонент при изменении.

const initialValue = [
{
  id: 9,
  email: "michael.lawson@reqres.in",
  first_name: "Michael",
  last_name: "Lawson",
  avatar: "https://s3.amazonaws.com/uifaces/faces/twitter/follettkyle/128.jpg"
},
{
  id: 10,
  email: "lindsay.ferguson@reqres.in",
  first_name: "Lindsay",
  last_name: "Ferguson",
  avatar: "https://s3.amazonaws.com/uifaces/faces/twitter/araa3185/128.jpg"
}
];

export default function App() {
  const [people, setPeople] = useState(initialValue);

  const handleClick = () => {
    return axios.get(`https://reqres.in/api/users?page=2`).then(res => {
      setPeople(res.data.data);
    });
  };

  return (
    <div className="App">
      <Button color="primary" type="Submit" onClick={handleClick}>
      click me !!!
    </Button>
    <EleventHeaderCard />
  </div>
  );
}
Другие вопросы по тегам