Доступ к объекту внутри другого, который задан как переменная в React Native

#arrays #json #react-native #assets #react-props

#массивы #json #реагировать-родной #активы #react-props #react-native

Вопрос:

Я хочу получить доступ к свойству объекта внутри объекта, который я вызываю из файла активов :

 const services = {
    
    facebook: {
        name: "facebook",
        color: "#28A2F3"
    },
    spotify: {
        name: "spotify",
        color: "#42D778"
    }
    
  }

  module.exports = services
  

Мой компонент :

 export default function PasswordCard({icon, color}, props) {
    return (
        <View style={{
            padding: 20,
            backgroundColor: service[props.site].color,
            elevation: 2,
            borderRadius: 5,
            flexDirection: "row",
            alignItems: "center",
            justifyContent: "space-evenly",
            marginTop:5,
            marginBottom: 5,
        }}>
            <Icon style={styles.service} name={service[props.site].name} size={27} color="white" />
            <View style={styles.TextContainer}>
                <Text style={styles.Text}>k.adesida@provi.data</Text>
                <Text style={styles.Text}> 213 (0) 384639293</Text>
            </View>
            <TouchableHighlight style={styles.icon}>
                <BenjaminButton name="eye" size={22} color="white" />
            </TouchableHighlight>
        </View>
    )
}
  

Где я вызываю свой компонент с помощью реквизита, который я передаю :

 <View style={styles.CardContainer}>
   <PasswordCard site={"facebook"} />
   <PasswordCard site={"spotify"} />
</View>
  

Ошибка, которую я получил в любом случае :

 TypeError: undefined is not an object (evaluating 'service[props.site].color')
  

Но когда я пытаюсь получить доступ с помощью service.facebook.name здесь нет никакой ошибки.

Ответ №1:

Props всегда является первым параметром, поэтому при обращении к props в качестве второго параметра он будет неопределенным, и при его использовании вы получите указанную выше ошибку

Если вы измените свой компонент, как показано ниже

 function PasswordCard({icon, color,site}) {
  

И стили, подобные приведенным ниже

 backgroundColor: service[site].color,
  

Это будет работать.
Также вам следует изменить другие места, где вы ссылаетесь на это.

Комментарии:

1. Сработало отлично, спасибо за вашу помощь и пояснения