带有reacjs的模态得到空值

问题描述 投票:0回答:1

我有这样的父母:

function ViewBudgetPage() {
  const pathname = useParams();
  const [plate, setPlate] = useState("");
  const [bikeDataModal, setBikeDataModal] = useState(false);

  useEffect(() => {
    getBudgetByIdRequest(pathname.id).then((response) => {
      setPlate(response.data.plate);
    });
  }, [pathname.id]);

  function openBikeDataModal() {
    setBikeDataModal(true);
  }

  function closeBikeDataModal() {
    setBikeDataModal(false);
  }

  return (
    <div className="text-center mt-5">
        <input type="text" defaultValue={plate} disabled className="me-3" />
        <button className="btn btn-outline-primary" onClick={openBikeDataModal}>
          Click Me
        </button>
      <BikeDataModal
        show={bikeDataModal}
        close={closeBikeDataModal}
        plate={plate}
      />
    </div>
  );
}
export default ViewBudgetPage;

我在useEffect中获取车牌数据并将其设置为值。
车牌值正在传递给模态。
该模式仅在单击时打开。
在模态类中,我有另一个 useEffect,它在后端请求中使用车牌值。
第一次渲染时,车牌值为空,并且我从后端收到错误,之后我得到了正确的值。
如何使我的模态获得正确的板值?

reactjs modal-dialog bootstrap-modal
1个回答
0
投票

我假设您正在调用

GET /listBikeByPlate
组件中的
BikeDataModal
端点。

如果是这种情况,问题在于当

BikeDataModal
仍然是
plate
/
undefined
时,您正在渲染
null
,因此调用
GET /listBikeByPlate
时查询参数
plate
没有任何值(根据屏幕截图中的
?plate=

因此,您能做的最好的事情就是避免渲染子组件,直到

useEffect
中的初始请求完成。

我的建议是像这样添加一个新状态

const [isLoaded, setIsLoaded] = useState(false)

然后在您的

getBudgetByIdRequest
内部,一旦获取解析/完成,将
setIsFetching
设置为
true
,就像这样

  useEffect(() => {
    getBudgetByIdRequest(pathname.id).then((response) => {
      setPlate(response.data.plate);
      setIsLoaded(true)
    });
  }, [pathname.id]);

最后在原始

return
块之前进行条件渲染

if (!isLoaded) {
  return <>Loading</>
}

因此,在获取完成并且您的

plate
已设置后,您的
BikeDataModal
现在将拥有正确的
plate
数据,从而进行正确的 API 调用。

© www.soinside.com 2019 - 2024. All rights reserved.