Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não entendi a parte que diz que o input type padrão é text.

Neste trecho da aula:

Em input, diremos que o type é igual ao type que recebemos via props. Porém, se estivermos fazendo uma refatoração e tivermos um componente do tipo 'text' sendo já utilizado em outros lugares e mudarmos para outro diferente, poderemos ter problemas nesses outros.

Portanto, se dissermos que o type padrão é igual a 'text', não teremos essa questão, pois na forma como está, é exatamente igual ao que estava antes. Mas agora temos uma nova propriedade type e, se os novos componentes que utilizarmos tiverem um tipo diferente, só irá alterar esta parte e não os outros componentes que fizemos.

Então essa é uma forma de fazermos uma refatoração eficiente que não causa problemas no código.

Que problemas o código pode ter se não especificarmos o type padrão como text? Meu código é um pouco diferente e eu estou usando a propriedade props para tudo.

const Campo = (props) => {

    const aoDigitar = (evento) => {
        props.aoAlterar(evento.target.value)
    }

    return (
        <div className={`campo campo-${props.type}`}>
            <label>
                {props.label}
            </label>

            <input
            type={props.type}
            value={props.valor}
            onChange={aoDigitar}
            required = {props.obrigatorio}
            placeholder={props.placeholder}/>

        </div>
    )
}

export default Campo

Mais pra frente, quando o professor foi inspecionar o campo de cores, ele destacou as duas divs de cima do input. Uma era campo-color e a outra era campo-text.

Por eu não ter especificado e usado props, ao invés de campo-text, minha div ficou como campo-undefined. Mesmo assim, o código funcionou e consegui criar um novo time sem nenhum problema. Se eu manter meu código desse jeito e não criar o type='text' juntamente com outras propriedades da função, o que pode acontecer?

1 resposta
solução!

Olá, Eduardo!

Entendo que a dúvida seja sobre a necessidade de especificar um tipo padrão para o input.

Vamos lá, quando você cria um componente que é reutilizado em vários lugares do seu código, é importante ser cauteloso ao fazer alterações nele. Isso porque uma mudança pode afetar todas as instâncias onde o componente é utilizado.

No caso do seu componente Campo, você está recebendo o tipo do input através das props. Se em algum lugar do seu código você usa o componente Campo sem especificar um tipo para o input, o valor dessa propriedade será undefined. Isso pode não ter causado problemas para você até agora, mas pode levar a comportamentos inesperados no futuro.

Por exemplo, se em algum lugar do seu código você espera que o input seja do tipo texto por padrão, mas você não especificou isso ao usar o componente Campo, o input não será renderizado como um campo de texto, mas sim como um campo sem tipo definido.

Para evitar esse tipo de problema, é uma boa prática definir valores padrão para as props. No caso do seu componente, você pode definir que o tipo padrão do input seja 'text'. Assim, se você não especificar um tipo ao usar o componente Campo, o input será renderizado como um campo de texto.

Aqui está um exemplo de como você pode fazer isso:

const Campo = (props) => {

    const aoDigitar = (evento) => {
        props.aoAlterar(evento.target.value)
    }

    return (
        <div className={`campo campo-${props.type || 'text'}`}>
            <label>
                {props.label}
            </label>

            <input
            type={props.type || 'text'}
            value={props.valor}
            onChange={aoDigitar}
            required = {props.obrigatorio}
            placeholder={props.placeholder}/>

        </div>
    )
}

export default Campo

Neste código, se o tipo não for especificado ao usar o componente Campo, o valor da propriedade type será 'text' por padrão.

Espero ter ajudado e bons estudos!