Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ao criar novo time, cor do novo time não é executada. Como fazer essa conexão?

Olá boa tarde, aparentemente meu codigo está um pouco diferente da aula. Mas imagino que exista solução para que meu codigo fique tão funcional quanto o da aula sem eu ter que deixar exatamente igual ao do professor. Ao clicar no botão cadastrar novo time, a seguinte mensagem aparece:

hex is undefined
removeHash@http://localhost:3000/static/js/bundle.js:2236:3
hexToRgba@http://localhost:3000/static/js/bundle.js:2290:31
Time@http://localhost:3000/static/js/bundle.js:1069:72
renderWithHooks@http://localhost:3000/static/js/bundle.js:21106:31
mountIndeterminateComponent@http://localhost:3000/static/js/bundle.js:24392:17

Imagino que seja algum erro de codigo no meu segundo formulário. A ideia é que seja criado um novo time, com uma cor e que esse novo time apareça na lista suspensa após cadastrado. Podem me ajudar por favor? Abaixo um trecho do código, mas também deixarei no gitHuB o projeto completo.

onst Formulario = (props) => {


    const aoSalvar = (evento) => {
        evento.preventDefault()
        props.aoColaboradorCadastrado({
            Nome,
            Cargo,
            Imagem,
            Time
        })

        setNome('')
        setCargo('')
        setImagem('')
        setTime('')
    }

    const aoSubmeter = (evento) => {
        evento.preventDefault()
        props.cadastrarTime({
            NomeTime,
            CorTime
        })

        setNomeTime('')
        setCorTime('')
    }


    const [Nome, setNome] = useState('')
    const [Cargo, setCargo] = useState('')
    const [Imagem, setImagem] = useState('')
    const [Time, setTime] = useState('')
    const [NomeTime, setNomeTime] = useState('')
    const [CorTime, setCorTime] = useState('')
    
    
    return (
        <section className="formulario">

            <form onSubmit={aoSalvar}>
                <h2> Preencha os dados abaixo para criar o card do colaborador</h2>
                <CampoTexto
                    obrigatorio={true}
                    label="Nome" placeholder="Digite o seu nome..."
                    valor={Nome}
                    aoAlterado={valor => setNome(valor)}
                />

                <CampoTexto
                    obrigatorio={true}
                    label="Cargo" placeholder="Digite o seu cargo..."
                    valor={Cargo}
                    aoAlterado={valor => setCargo(valor)}
                />

                <CampoTexto
                    label="Imagem" placeholder="Digite o endereço da imagem..."
                    valor={Imagem}
                    aoAlterado={valor => setImagem(valor)}
                />

                <ListaSuspensa
                    obrigatorio={true} label='Times' itens={props.Times}
                    valor={Time}
                    aoAlterado={valor => setTime(valor)}
                />

                <Botao>
                    Criar card
                </Botao>

            </form>
            
            <form className="formulario" onSubmit={aoSubmeter}>

                <h3> Preencha os dados abaixo para criar um novo time</h3>

                <CampoTexto
                    obrigatorio={true}
                    label="Nome do Time" placeholder="Digite o nome do novo Time..."
                    valor={NomeTime}
                    aoAlterado={valor => setNomeTime(valor)}
                />

                <CampoTexto
                    obrigatorio={true}
                    label="Cor" placeholder="Digite a cor do novo Time.."
                    valor={CorTime}
                    aoAlterado={valor => setCorTime(valor)}
                />
                <Botao>
                    Criar novo Time
                </Botao>

            </form>

            
        </section>
    )

}

export default Formulario

gitHub https://github.com/naritagodoy/Organo.git

3 respostas
solução!

Oi Narita! Tudo ok contigo?

Bom eu baixei o seu código no GitHub e quando eu rodei ele após ter instalado todos os pacotes e dependências necessárias, eu tive um único erro toda vez que eu tentava cadastrar um novo time. E o motivo para isso eu demorei para encontrar, mas foi simplesmente o fato que você passava na submissão do formulário os estados do nome do novo time e a cor diretamente, assim o navegador não entendia o que fazer com aquilo e então ele dava um erro enorme que foi o que você postou uma parte em seu tópico, o erro completo recebido é:

Uncaught runtime errors:
ERROR
Cannot read properties of undefined (reading 'charAt')
TypeError: Cannot read properties of undefined (reading 'charAt')
    at removeHash (http://localhost:3002/static/js/bundle.js:2234:14)
    at hexToRgba (http://localhost:3002/static/js/bundle.js:2288:21)
    at Time (http://localhost:3002/static/js/bundle.js:1072:72)
    at renderWithHooks (http://localhost:3002/static/js/bundle.js:21104:22)
    at mountIndeterminateComponent (http://localhost:3002/static/js/bundle.js:24390:17)
    at beginWork (http://localhost:3002/static/js/bundle.js:25686:20)
    at HTMLUnknownElement.callCallback (http://localhost:3002/static/js/bundle.js:10696:18)
    at Object.invokeGuardedCallbackDev (http://localhost:3002/static/js/bundle.js:10740:20)
    at invokeGuardedCallback (http://localhost:3002/static/js/bundle.js:10797:35)
    at beginWork$1 (http://localhost:3002/static/js/bundle.js:30671:11)

Pelo menos foi esse erro que apareceu ao testar seu código antes de mexer nele.

Para solucionar isso então foi só parar de passar os estados dos componente diretamente como parâmetro da props.cadastrarTime e passar um objeto JSON com nome e cor, que esses por sua vez receberiam os estador de nome e cor. Saindo disso:

const aoSubmeter = (evento) => {
        evento.preventDefault()
        props.cadastrarTime({
            NomeTime,
            CorTime
        })

        setNomeTime('')
        setCorTime('')
}

Para isso:


const aoSubmeter = (evento) => {
        evento.preventDefault()
        props.cadastrarTime({
            nome: NomeTime,
            cor: CorTime
        })

        setNomeTime('')
        setCorTime('')
}

Arquivo: Src/componentes/Formulario/index.js; Aproximadamente entre linhas 27 até linha 36.

Com isso seu código deve funcionar perfeitamente.

Entendeu agora o que aconteceu? Bom eu ainda teria algumas sugestões para seu código, mas isso deixamos para outra hora.

Se precisar eu estarei por aqui!

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor marque ele como solução! ✓

Oi Renan! Nossa, realmente você está certíssimo, entendi sim o erro! Muito obrigada pela ajuda, funcionou perfeitamente. E sim, tenho certeza de que há muito a melhorar no meu código...estou tentando e espero um dia ficar tão boa quanto vocês que nos ajudam aqui! Mais uma vez muuuito obrigada! Boa semana :)

Oie Narita! Tudo bem?

Fico feliz que pude lhe ajudar! Quando eu disse que tinha sugestões para seu código, foi no sentido de que percebi que você está usando o código do primeiro curso, onde esse projeto foi desenvolvido, mas o instrutor nesse curso fez algumas mudanças em relação a àquele código, portanto existem alguns blocos de código no seu projeto que já não são necessários, pois o instrutor durante esse curso, criou funcionalidades para substituir eles. Assim eles não são mais necessários. Foi só isso tá.

Ademais o seu código está incrível, e você conseguiu manter o ritmo mesmo sem fazer as mudanças que o instrutor fez "por baixo dos panos", e por isso eu também até quero lhe parabenizar tá, pois, isso por si só já é algo incrível. Então parabéns tá!

E se precisar de mais algo eu vou estarei aqui para poder lhe ajudar tá.

Abraços, e deixo aqui minha admiração e desejo de ver o que você ainda vai criar, creio que você ainda tem um incrível futuro pela frente!

Bom estudos ;)