对象数组不打印到屏幕 - React
Object array not printing to screen - React
在页面加载时,我使用 UseEffect 获取一个对象数组 files
。数组映射通过,如果是男性则添加到maleArray
,如果是女性则添加到femaleArray
。最后,我使用 console.log
来检查新数组是否已填满并且已经填满。在此之后,我还将 hasLoaded
设置为 true。
const[hasLoaded, setHasLoaded] = useState();
var maleArray= [];
var femaleArray= [];
useEffect(() => {
getPersonGender();
}, [props.files]);
const getPersonGender = () => {
if(!props.files.length > 0){
console.log("WAITING");
}else{
props.files.map( person => {
if(person.gender=== "male"){
maleArray.push(person);
}else{
femaleArray.push(person);
}
});
console.log(maleArray)
console.log(femaleArray)
setHasLoaded(true);
}
}
然而,当我到达 return 语句时,我填充的新数组似乎是空的。例如,我试图将 maleArray 映射到 table。我检查了 hasLoaded,这是真的,但是当我开始打印时,没有任何显示,我也不知道为什么。当我尝试调试时,似乎 maleArray 和 femaleArray 从未填充,但是,我得到的 console.log 结果表明它们是。
{!hasLoaded
?<div class="spinner-border" role="status"></div>
:
<table class="table">
<tbody>
{maleArray.map(male=> (
<tr>
<td>{male.name}</td>
<td>{male.age}</td>
</tr>
))}
</tbody>
</table>
}
新数组未被填充的任何原因,但我在 console.log 上看到了输出?谢谢
我认为您在 {maleArray.map(male=>
不应该是 { maleArray.map((male) => { 其余代码 }
它不起作用的主要原因是未设置状态。您需要使用 useState() 挂钩将其分配给数组,然后进一步使用它们
完整的工作示例
import { useState, useEffect } from "react";
function ConfigurationList(props) {
const [hasLoaded, setHasLoaded] = useState();
// usage of hooks
const [maleArray, setMaleArr] = useState([]);
const [femaleArray, setFemaleArr] = useState([]);
useEffect(() => {
getPersonGender();
}, [props.files]);
const getPersonGender = () => {
let maleBuf = [];
let femaleBuf = [];
if (!props.files.length > 0) {
console.log("WAITING");
} else {
props.files.map((person) => {
if (person.gender === "male") {
maleBuf.push(person);
} else {
femaleBuf.push(person);
}
});
console.log(maleArray);
console.log(femaleArray);
// Setting the value to the state
setFemaleArr([...femaleBuf])
setMaleArr([...maleBuf])
setHasLoaded(true);
}
};
return (
<div>
<div class="card rounded-0">
<div class="card-header bg-dark custom-font rounded-0">Male</div>
<div class="card-body text-center">
{!hasLoaded ? (
<div class="spinner-border" role="status"></div>
) : (
<table class="table">
<thead>
<tr>
<th style={{ width: "30%" }} scope="col">
Name
</th>
<th style={{ width: "30%" }} scope="col">
Age
</th>
</tr>
</thead>
<tbody>
{maleArray.map((male) => (
<tr>
<td>{male.name}</td>
<td>{male.age}</td>
</tr>
))}
</tbody>
</table>
)}
</div>
</div>
</div>
);
}
export default ConfigurationList;
使用状态:
你必须确保数组没有直接更新,因为那样不会渲染数据,所以你应该创建一个局部变量然后将它赋值给最后的状态,或者你可以使用展开运算符然后赋值他们,两者都应该工作。
在页面加载时,我使用 UseEffect 获取一个对象数组 files
。数组映射通过,如果是男性则添加到maleArray
,如果是女性则添加到femaleArray
。最后,我使用 console.log
来检查新数组是否已填满并且已经填满。在此之后,我还将 hasLoaded
设置为 true。
const[hasLoaded, setHasLoaded] = useState();
var maleArray= [];
var femaleArray= [];
useEffect(() => {
getPersonGender();
}, [props.files]);
const getPersonGender = () => {
if(!props.files.length > 0){
console.log("WAITING");
}else{
props.files.map( person => {
if(person.gender=== "male"){
maleArray.push(person);
}else{
femaleArray.push(person);
}
});
console.log(maleArray)
console.log(femaleArray)
setHasLoaded(true);
}
}
然而,当我到达 return 语句时,我填充的新数组似乎是空的。例如,我试图将 maleArray 映射到 table。我检查了 hasLoaded,这是真的,但是当我开始打印时,没有任何显示,我也不知道为什么。当我尝试调试时,似乎 maleArray 和 femaleArray 从未填充,但是,我得到的 console.log 结果表明它们是。
{!hasLoaded
?<div class="spinner-border" role="status"></div>
:
<table class="table">
<tbody>
{maleArray.map(male=> (
<tr>
<td>{male.name}</td>
<td>{male.age}</td>
</tr>
))}
</tbody>
</table>
}
新数组未被填充的任何原因,但我在 console.log 上看到了输出?谢谢
我认为您在 {maleArray.map(male=>
不应该是 { maleArray.map((male) => { 其余代码 }
它不起作用的主要原因是未设置状态。您需要使用 useState() 挂钩将其分配给数组,然后进一步使用它们
完整的工作示例
import { useState, useEffect } from "react";
function ConfigurationList(props) {
const [hasLoaded, setHasLoaded] = useState();
// usage of hooks
const [maleArray, setMaleArr] = useState([]);
const [femaleArray, setFemaleArr] = useState([]);
useEffect(() => {
getPersonGender();
}, [props.files]);
const getPersonGender = () => {
let maleBuf = [];
let femaleBuf = [];
if (!props.files.length > 0) {
console.log("WAITING");
} else {
props.files.map((person) => {
if (person.gender === "male") {
maleBuf.push(person);
} else {
femaleBuf.push(person);
}
});
console.log(maleArray);
console.log(femaleArray);
// Setting the value to the state
setFemaleArr([...femaleBuf])
setMaleArr([...maleBuf])
setHasLoaded(true);
}
};
return (
<div>
<div class="card rounded-0">
<div class="card-header bg-dark custom-font rounded-0">Male</div>
<div class="card-body text-center">
{!hasLoaded ? (
<div class="spinner-border" role="status"></div>
) : (
<table class="table">
<thead>
<tr>
<th style={{ width: "30%" }} scope="col">
Name
</th>
<th style={{ width: "30%" }} scope="col">
Age
</th>
</tr>
</thead>
<tbody>
{maleArray.map((male) => (
<tr>
<td>{male.name}</td>
<td>{male.age}</td>
</tr>
))}
</tbody>
</table>
)}
</div>
</div>
</div>
);
}
export default ConfigurationList;
使用状态: 你必须确保数组没有直接更新,因为那样不会渲染数据,所以你应该创建一个局部变量然后将它赋值给最后的状态,或者你可以使用展开运算符然后赋值他们,两者都应该工作。