I have little experience in react and javaScript and am having difficulty rendering a list that is initially empty The list should be a list of search results that will be presented to the user after clicking search but the list is not being displayed because it is empty and it is not being displayed after getting the search result.
export default function PesquisarDisc() {
const [disciplinas, setDisciplinas] = useState([]);
const [resPesquisa, setResPesquisa] = useState([]);
const user = useSelector((state) => state.user.profile);
async function carregarDisciplinas() {
const response = await api.get('disciplinas');
return response.data;
}
function handleSubmit({ anoLetivo1, curso1, unidadeCurricular1 }) {
carregarDisciplinas().then((value) => {
setDisciplinas(value);
});
disciplinas.forEach((disciplina) => {
if (
disciplina.professor_id === user.id &&
disciplina.anoLetivo === anoLetivo1 &&
disciplina.curso === curso1 &&
disciplina.nome === unidadeCurricular1
) {
setResPesquisa(disciplina);
}
});
}
return (
<Container>
<div className="title">Pesquisar disciplinas</div>
<Form onSubmit={handleSubmit}>
<span>Ano Letivo:</span>
<Input
name="anoLetivo1"
type="text"
placeholder="Introduza o ano letivo"
/>
<span>Unidade Curricular:</span>
<Input
name="unidadeCurricular1"
type="text"
placeholder="Introduza a unidade curricular"
/>
<span>Curso:</span>
<Input name="curso1" type="text" placeholder="Introduza o curso" />
<hr />
<button type="submit">Pesquisar</button>
</Form>
<List>
{resPesquisa.map((resultado) => (
<li key={resultado.nome}>
<span>{resultado.nome}</span>
<a href="/">Lançar sumário</a>
</li>
))}
</List>
</Container>
);
}
resPesquisa, but it's not an array; you're resetting the state value N times in thehandleSubmit'sforEachto an object:disciplinaresPesquisais not an array. You are usingsetResPesquisa(disciplina);which is setting an object onresPesquisawithin a for loop. Therefore when you try to map onresPesquisais fails.