【发布时间】:2020-08-11 18:12:48
【问题描述】:
下面的 useEffect 渲染、获取数据并显示一次(使用空数组作为 useEffect 中的第二个参数)。
每次用户将数据更改到数据库时(当用户使用 axios.post 时),我都需要它重新运行 useEffect。
我试过的
- 使用 [tickets],但这只会导致 useEffect 无限运行
- 也使用 [tickets.length] 和 [tickets, setTickets]
- 尝试使用 props 作为参数,但没有找到任何有用的东西
import React, { useState, createContext, useEffect } from "react";
import axios from "axios";
export const TicketContext = createContext();
export const TicketProvider = (props) => {
console.log(props);
const [tickets, setTickets] = useState([]);
useEffect(() => {
getTickets();
console.log("1", { tickets });
}, []);
const getTickets = async () => {
const response = await axios.get("http://localhost:4000/tickets/");
setTickets(response.data);
};
return <TicketContext.Provider value={[tickets, setTickets]}>{props.children}
</TicketContext.Provider>;
};
import React from "react";
import { useState, useEffect, useContext } from "react";
import Ticket from "../Ticket";
import { TicketContext } from "../contexts/TicketContext";
import AddBacklog from "../addData/AddBacklog";
const TicketDisplay = (props) => {
const [tickets, setTickets] = useContext(TicketContext);
return (
<div className="display">
<p>Antony Blyakher</p>
<p>Number of Tickets: {tickets.length}</p>
<div className="backlog">
<h1>Backlog</h1>
{tickets.map((currentTicket, i) => (
<div className="ticketBlock">
<Ticket ticket={currentTicket} key={i} />
</div>
))}
</div>
</div>
);
const AddBacklog = (props) => {
const [tickets, setTickets] = useState("");
...
axios.post("http://localhost:4000/tickets/add", newTicket).then((res) => console.log(res.data));
setTickets((currentTickets) => [...currentTickets, { name: name, status: "backlog", id: uuid() }]);
};
【问题讨论】:
-
用户修改了哪些数据?
-
axios.post("localhost:4000/tickets/add", newTicket).then((res) => console.log(res.data)); setTickets((currentTickets) => [...currentTickets, { name: name, status: "backlog", id: uuid() }]);
-
我编辑了帖子以显示添加票功能
-
当你打电话给
/tickets/add,然后你想打电话给/tickets/?使用useEffect()? -
我不明白你的问题,你能澄清一下吗?
标签: reactjs axios use-effect use-state use-context