如何在 useEffect() 中正确实现 setState()?
How do I correctly implement setState() within useEffect()?
如果这个 useEffect() 运行s 一次(使用 [] 作为第二个参数),setTicket(response.data) 不会用数据更新 ticket 的值。如果我 运行 useEffect() 以 [ticket] 作为参数,它会用数据更新 ticket 的值,但是 useEffect 变成了无限循环。
我需要它 运行 一次并更新工单数据。我不认为我理解 useEffect() 和它的第二个参数。
我该怎么做才能得到预期的结果?
import React from "react";
import axios from "axios";
import { useState, useEffect } from "react";
const EditTicket = (props) => {
const [ticket, setTicket] = useState("");
useEffect(() => {
axios
.get("http://localhost:4000/tickets/" + props.match.params.id)
.then((response) => {
setTicket(response.data);
console.log({ ticket });
})
.catch(function (error) {
console.log(error);
});
}, []);
return <div>edit</div>;
};
export default EditTicket;
ticket
是本地人 const
。它永远不会改变,这不是 setTicket
想要做的。 setTicket
的目的是告诉组件重新渲染。在下一次渲染时,将创建一个具有新值的新局部变量。
您的代码已经按照应有的方式编写,只是您的日志语句没有为您提供任何有用的信息。如果您想看到它使用新值重新呈现,您可以将日志语句移动到组件的主体。
const EditTicket = (props) => {
const [ticket, setTicket] = useState("");
console.log('rendering', ticket);
useEffect(() => {
// same as before
如果这个 useEffect() 运行s 一次(使用 [] 作为第二个参数),setTicket(response.data) 不会用数据更新 ticket 的值。如果我 运行 useEffect() 以 [ticket] 作为参数,它会用数据更新 ticket 的值,但是 useEffect 变成了无限循环。
我需要它 运行 一次并更新工单数据。我不认为我理解 useEffect() 和它的第二个参数。
我该怎么做才能得到预期的结果?
import React from "react";
import axios from "axios";
import { useState, useEffect } from "react";
const EditTicket = (props) => {
const [ticket, setTicket] = useState("");
useEffect(() => {
axios
.get("http://localhost:4000/tickets/" + props.match.params.id)
.then((response) => {
setTicket(response.data);
console.log({ ticket });
})
.catch(function (error) {
console.log(error);
});
}, []);
return <div>edit</div>;
};
export default EditTicket;
ticket
是本地人 const
。它永远不会改变,这不是 setTicket
想要做的。 setTicket
的目的是告诉组件重新渲染。在下一次渲染时,将创建一个具有新值的新局部变量。
您的代码已经按照应有的方式编写,只是您的日志语句没有为您提供任何有用的信息。如果您想看到它使用新值重新呈现,您可以将日志语句移动到组件的主体。
const EditTicket = (props) => {
const [ticket, setTicket] = useState("");
console.log('rendering', ticket);
useEffect(() => {
// same as before