1
resposta

Componente customizado Botao

Em Botao.js:

import React from 'react';
import { StyleSheet, TouchableOpacity } from 'react-native';

import Texto from './Texto';

export default function Botao({ children, style, onPress }) {
    return <TouchableOpacity style={[style, estilos.botao]} onPress={onPress}>
               <Texto style={estilos.textoBotao}>{ children }</Texto>
           </TouchableOpacity>
}

const estilos = StyleSheet.create({
    botao: {
        fontFamily: 'MontserratBold',
        backgroundColor: '#2A9F85',
        paddingVertical: 16,
        borderRadius: 6,
    },
    textoBotao: {
        textAlign: 'center',
        color: '#fff',
        fontSize: 16,
        lineHeight: 26,
        fontWeight: 'bold',
    }    
})

Em Detalhes,js:

export default function Detalhes({ nome, logoFazenda, nomeFazenda, descricao, preco, botao }) {
    return <>
        <Texto style={estilos.nome}>{ nome }</Texto>
        <View style={estilos.fazenda}>
            <Image source={ logoFazenda } style={estilos.imagemFazenda} />
            <Texto style={estilos.nomeFazenda}>{ nomeFazenda }</Texto>
        </View>
        <Texto style={estilos.descricao}>{ descricao }</Texto>
        <Texto style={estilos.preco}>{ preco }</Texto>

        **<Botao style={estilos.botao} onPress={() => {}}>{ botao }</Botao>**
    </>
}

const estilos = StyleSheet.create({
    nome: {
        color: '#464646',
        fontSize: 26,
        lineHeight: 42,
        fontWeight: 'bold',
    },
    fazenda: {
        flexDirection: 'row',
        paddingVertical: 12,
    },
    imagemFazenda: {
        width: 32,
        height: 32,
    },
    nomeFazenda: {
        fontSize: 16,
        lineHeight: 26,
        marginLeft: 12,
    },
    descricao: {
        color: '#A3A3A3',
        fontSize: 16,
        lineHeight: 26,
    },
    preco: {
        color: '#2A9F85',
        fontWeight: 'bold',
        fontSize: 26,
        lineHeight: 42,
        marginTop: 8,
    },
**botao: {
        marginTop: 16,
    }**
})
1 resposta

Olá, Franco! Tudo bem?

Pelo que entendi, você está com uma dúvida relacionada a um componente customizado de botão em React Native, correto?

No código que você compartilhou, você tem um componente chamado Botao em um arquivo chamado Botao.js. Esse componente recebe três propriedades: children, style e onPress. Ele retorna um elemento TouchableOpacity que envolve um componente Texto e recebe as propriedades style e onPress.

Em seguida, você tem um outro componente chamado Detalhes em um arquivo chamado Detalhes.js. Nesse componente, você está utilizando o componente Botao e passando algumas propriedades para ele, como style e onPress.

Aparentemente, a sua dúvida está relacionada à propriedade style do componente Botao. No arquivo Detalhes.js, você está passando a propriedade style={estilos.botao} para o componente Botao. No entanto, não está claro o que é estilos.botao. Seria uma referência a um estilo definido no arquivo Detalhes.js?

Caso você esteja tentando estilizar o componente Botao no arquivo Detalhes.js, você pode adicionar a propriedade style diretamente no componente Botao no arquivo Botao.js. Assim, você poderá passar o estilo desejado quando utilizar o componente Botao em outros lugares.

Por exemplo, no arquivo Botao.js, você pode adicionar a propriedade style ao componente TouchableOpacity da seguinte forma:

return <TouchableOpacity style={[style, estilos.botao]} onPress={onPress}>
           <Texto style={estilos.textoBotao}>{ children }</Texto>
       </TouchableOpacity>

Dessa forma, quando você utilizar o componente Botao em outros lugares, poderá passar um estilo específico através da propriedade style, como por exemplo:

<Botao style={estilos.botaoPersonalizado} onPress={() => {}}>Clique aqui</Botao>

No exemplo acima, estilos.botaoPersonalizado seria um estilo definido no arquivo Detalhes.js.

Espero ter ajudado! Se tiver mais alguma dúvida, é só perguntar. Bons estudos!