【发布时间】:2021-03-20 12:27:37
【问题描述】:
我有一个子元素,它显示从父元素传递的订单列表。我想在子级中放置一个“刷新”按钮,一旦按下该按钮,就会在父级内部调用一个函数来刷新订单。
单击刷新按钮时,其文本会通过使用本地状态挂钩转到“正在加载...”。问题是在新刷新的订单列表从父级到达后,我不确定如何将钩子的状态更改回“未加载”。
这是我的代码(也在 CodeSandbox:https://codesandbox.io/s/sad-wilbur-tbf7l?file=/src/App.js):
import React from "react";
import "./styles.css";
const OrderDisplay = ({ orders, refreshOrders }) => {
const [refreshing, setRefreshing] = React.useState(false);
const handleRefreshBtn = () => {
setRefreshing(true);
refreshOrders();
};
return (
<div>
<button onClick={handleRefreshBtn}>
{refreshing ? <span>loading...</span> : <span>Refresh Orders</span>}
</button>
{orders.map((item, index) => (
<div key={index}>
Name: {item.name} | Total: ${item.total}
<hr />
</div>
))}
</div>
);
};
export default function App() {
const [orders, setOrders] = React.useState(null);
const initialMount = React.useRef(true);
const getOrders = () => {
setTimeout(() => {
setOrders([
{ name: "Order 1", total: Math.floor(Math.random() * 10) + 1 },
{ name: "Order 2", total: Math.floor(Math.random() * 10) + 1 }
]);
}, 1000);
};
if (initialMount.current) {
initialMount.current = false;
getOrders();
}
return (
<div className="App">
<h1>Orders</h1>
{orders ? (
<OrderDisplay orders={orders} refreshOrders={getOrders} />
) : null}
</div>
);
}
点击“刷新订单”按钮后,您会注意到订单刷新成功,但按钮停留在“正在加载...”。我该如何解决?
【问题讨论】:
标签: javascript reactjs react-hooks