2
respostas

Erro no código

Boa tarde, no meu código é apresentado um erro, porém não consigo identificar, segue abaixo o erro e o código

ncaught TypeError: validacoes[name] is not a function at validarCampos (DadosPessoais.jsx:23:1) at handleBlur (InputBase.js:340:1) at HTMLUnknownElement.callCallback (react-dom.development.js:3945:1) at Object.invokeGuardedCallbackDev (react-dom.development.js:3994:1) at invokeGuardedCallback (react-dom.development.js:4056:1) at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4070:1) at executeDispatch (react-dom.development.js:8243:1) at processDispatchQueueItemsInOrder (react-dom.development.js:8275:1) at processDispatchQueue (react-dom.development.js:8288:1) at dispatchEventsForPlugins (react-dom.development.js:8299:1) validarCampos @ DadosPessoais.jsx:23 handleBlur @ InputBase.js:340 callCallback @ react-dom.development.js:3945 invokeGuardedCallbackDev @ react-dom.development.js:3994 invokeGuardedCallback @ react-dom.development.js:4056 invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:4070 executeDispatch @ react-dom.development.js:8243 processDispatchQueueItemsInOrder @ react-dom.development.js:8275 processDispatchQueue @ react-dom.development.js:8288 dispatchEventsForPlugins @ react-dom.development.js:8299 (anonymous) @ react-dom.development.js:8508 batchedEventUpdates$1 @ react-dom.development.js:22396 batchedEventUpdates @ react-dom.development.js:3745 dispatchEventForPluginEventSystem @ react-dom.development.js:8507 attemptToDispatchEvent @ react-dom.development.js:6005 dispatchEvent @ react-dom.development.js:5924 unstable_runWithPriority @ scheduler.development.js:468 runWithPriority$1 @ react-dom.development.js:11276 discreteUpdates$1 @ react-dom.development.js:22413 discreteUpdates @ react-dom.development.js:3756 dispatchDiscreteEvent @ react-dom.development.js:5889

2 respostas

function DadosPessoais({ aoEnviar, validacoes }) { const [nome, setNome] = useState(""); const [sobrenome, setSobreNome] = useState(""); const [CPF, setCPF] = useState(""); const [promocao, setPromocao] = useState(true); const [novidade, setNovidade] = useState(true); const [erros, setErros] = useState({ CPF: { valido: true, texto: '' } });

function validarCampos(event) {
    console.log(event.target)
    const { name, value } = event.target;
    const novoEstado = { ...erros };
    novoEstado[name] = validacoes[name](value);
    setErros(novoEstado);
}




return (
    <form onSubmit={evento => {
        evento.preventDefault()
        aoEnviar({ nome, sobrenome, CPF, promocao, novidade })

    }}>

        <TextField
            value={nome}
            onChange={evento => {
                let tmpNome = evento.target.value;
                // if (tmpNome.length >= 3) {
                //     tmpNome = tmpNome.substr(0, 3)
                // }
                setNome(tmpNome)
            }}
            id="nome"
            label="Nome"
            variant='outlined'
            fullWidth
            margin="normal"
            required />

        <TextField value={sobrenome}
            onChange={(evento) => {
                setSobreNome(evento.target.value)
            }}
            id="Sobrenome" label="Sobrenome" variant='outlined' fullWidth margin="normal"
            required />

        <TextField value={CPF} required name="CPF"
            onChange={(evento) => {
                setCPF(evento.target.value)

            }}
            onBlur={validarCampos}
            error={!erros.CPF.valido}
            helperText={erros.CPF.texto}
            id="CPF" label="CPF" variant='outlined' fullWidth margin="normal" />

        <FormControlLabel
            label="Promoções"
            control={
                <Switch
                    checked={promocao}
                    onChange={(event) => {
                        setPromocao(event.target.checked);
                    }}
                    name="promocoes"
                    color="primary"
                />
            }
        />

        <FormControlLabel
            label="Novidades"
            control={
                <Switch
                    checked={novidade}
                    onChange={(event) => {
                        setNovidade(event.target.checked);
                    }}
                    name="novidades"
                    color="primary"
                />
            }
        />


        <Button type="submit" variant="contained" color="primary">
            Cadastrar
        </Button>
        <Button>Voltar</Button>

    </form>)

}

export default DadosPessoais;

Fala Bruno, tudo bem? Espero que sim!

No TextField de cpf, o name deve ser cpf e não CPF, pois é esse name que utilizamos para acesar de forma dinâmica o nosso objeto, e o nome da propriedade nesse objeto é cpf e não CPF, sendo assim não conseguimos encontrar essa propriedade no objeto e não executando uma função e sim temos um retorno de undefined.

Então basta alterar:

<TextField value={CPF} required name="CPF"
            onChange={(evento) => {
                setCPF(evento.target.value)

            }}
            onBlur={validarCampos}
            error={!erros.CPF.valido}
            helperText={erros.CPF.texto}
            id="CPF" label="CPF" variant='outlined' fullWidth margin="normal" />

Para:

<TextField value={CPF} required name="cpf"
            onChange={(evento) => {
                setCPF(evento.target.value)

            }}
            onBlur={validarCampos}
            error={!erros.CPF.valido}
            helperText={erros.CPF.texto}
            id="CPF" label="CPF" variant='outlined' fullWidth margin="normal" />

Espero ter ajudado, abraços e bons estudos :D