【发布时间】:2022-11-02 05:46:32
【问题描述】:
我知道这是一个常见问题,但在寻找答案数小时后,我决定寻求帮助。
我正在尝试将状态变量传递给组件,但该组件是在设置值之前呈现的
我的代码:
import React, { useState, useEffect } from "react";
import { useLocation } from "react-router-dom";
import Seguradora from "../../components/seguradora/seguradora.component";
const CorretorasShow = () => {
const obj = useLocation();
const [names, setNames] = useState([]);
useEffect(() => {
const url =
"http://localhost:3001/corretoras/63338f415c502044e953d408" +
obj.state._id;
const fetchData = async () => {
try {
const response = await fetch(url);
const json = await response.json();
setNames(json.seguradora); // <<<<<< setState
} catch (error) {
console.log("error", error);
}
};
fetchData();
}, []);
return (
<div>
<Seguradora props={names} /> //<<<<< state varible
</div>
);
};
我试过 useMemo、useRef 和三元运算符无济于事。 我不是专业程序员,而且我是 reactJS 新手,所以我可能对这些解决方法做错了
【问题讨论】:
-
你的问题是什么?
-
names的类型是什么?数组还是字符串? -
哦,
names > 0永远是真的,你想要names.length > 0 -
我的问题可能是:如何在渲染组件之前设置变量值。现在发生的是组件被渲染并且我传递给它的变量为空。名称是一个对象数组。
-
names在第一次渲染时不为空,因为您将它初始化为一个空数组[],它不为空。为什么你认为它是空的?你确定json.seguradora里面有数据吗?养成使用console.log 来验证你的数据是否符合你期望的习惯,并养成阅读错误的习惯,不要忽视它们。
标签: javascript reactjs