Estou utilizando o react com Vite.
Eu tentei colocar em prática o uso do "memo" na página inicial de minha aplicação. Ela já é simples por padrão, e simplifiquei mais ainda removendo o parâmetro do componente CLogin. Inseri o comando console.log('CLogin'); e o comando console.log('CLoginPage'); na primeira linha de cada componente. Você poderá observar abaixo que CLogin não tem componente filho, mas apenas html puro.
Observando o console os componentes continuam renderizando duas vezes. Será que entendi algo errado???? Pensei que o "memo"! evitaria esta renderização duas vezes
export default memo(CLogin); export default memo(CLoginPage);
Código de um dos componentes simplificado
import { ChangeEvent, useState, FormEvent, memo } from "react";
import { WSSecuObje } from "./WSSecuObje";
import { fHashAsync } from "../../CommonApps/Functions/Security";
import { CWSResult } from "../../CommonApps/WSClient/CWSResult";
import { CUser } from "./CUser";
function CLogin() {
console.log('CLogin');
const [stUserName, setstUserName] = useState<string>("");
const [stPassword, setstPassword] = useState<string>("");
const [stError, setstError] = useState<string | undefined>(undefined);
async function handleSubmit(e: FormEvent<HTMLFormElement>) {
e.preventDefault();
let password = await fHashAsync(stPassword);
WSSecuObje.login(stUserName, password, (e: CWSResult<CUser>) => {
if (!e.isSuccess) {
setstError(e.message);
} else {
//onLogin(e);
}
});
}
return (
<div className='c-d-flex-column c-w-100 c-p-32px c-bg-color-pcc'>
<form onSubmit={handleSubmit}>
<div className="c-d-flex-column">
<div className="c-mb-8px">
<label className="form-label">Usuário</label>
<input
className="form-control"
onChange={(e: ChangeEvent<HTMLInputElement>) => setstUserName(e.target.value)}
value={stUserName}
/>
</div>
<div className="c-mb-8px">
<label className="form-label">Senha</label>
<input
className="form-control"
onChange={(e: ChangeEvent<HTMLInputElement>) => setstPassword(e.target.value)}
type="password"
value={stPassword}
/>
</div>
<div className={"c-mb-8px" + (stError ? ' c-d-flex' : ' c-d-none')}>
<div className="clogin__error">
{stError}
</div>
</div>
<div className="c-d-flex c-jc-center">
<button
className="btn btn-primary"
type="submit">Entrar</button>
</div>
</div>
</form>
</div >
);
}
export default memo(CLogin);
Imagem do Console
Não consegui adicionar a imagem, então vou digitar o que aparece no Console
CLoginPage (em preto) ----------- CLoginPage.tsx: 7
CLoginPage (em cinza) ------------ InstallHook.js:1
CLogin (em preto) ----------- CLogin.tsx: 17
CLogin (em cinza) ------------ InstallHook.js:1
Obrigado pela atenção sempre prestada