Как получить ребенка в массиве this.state

Я получаю некоторые пользовательские данные из безопасного хранилища и пытаюсь поместить их в this.state, а затем отображать элементы в отдельных текстовых полях. Так, например:

Имя: Марк
Фамилия: лол

Когда я отображаю this.state.UserData, он печатает все данные массива, но я хочу получить доступ только к его дочернему элементу. Как я могу это сделать?

constructor(props){
    super(props)
    this.state = {
        UserData: ''
    }
}

componentWillMount() {
    SecureStore.getItemAsync('userData')
    .then((data) => {
        this.setState({ UserData: data })
    });

}

render() {
    return (
        <View style = {{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
            <Text>
                {this.state.UserData['FirstName']}<-- not doing anything
            </Text>
        </View>
    );
}

Функция безопасного хранения:

userLogin = () =>{
            const {Email, passWord} = this.state;
            if (Email !== "" && passWord !== ""){
                fetch('', {
                    method: 'POST',
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '',
                        'Access-Control-Allow-Methods': 'POST',
                        'Access-Control-Max-Age': '3600',
                        'Access-Control-Allow-Headers': 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With'
                    },
                    body: JSON.stringify({
                        action: 'login',
                        email: Email,
                        password: passWord
                    })
                })
                .then((response) => response.json())
                .then((responseJson) => { 
                            //console.info(responseJson);
                            if (responseJson !== "" && responseJson !== '0'){
                                Alert.alert(
                                    'Succes',
                                    'ingelogd!',
                                    [
                                        {text: 'OK', onPress: () => console.info('OK Pressed')},
                                    ],
                                    { cancelable: false }
                                )
                                try {
                                    SecureStore.setItemAsync('userData', JSON.stringify(responseJson));
                                } catch (error) {
                                    alert('Er ging iets mis, probeer het later opnieuw ' . error);
                                }
                     }

}

Можете ли вы показать код, в котором вы храните пользовательские данные в SecureStore?

Andrew 13.02.2019 19:18

Кроме того, будет полезно, если вы установите начальное состояние UserData как объект, а не строку.

cr05s19xx 13.02.2019 19:36

Хорошо, я добавил код магазина. И как я могу изменить его на объект, а не на строку. Состояние по умолчанию является строкой, не так ли?

codGmer 13.02.2019 22:03
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина, по которой у вас возникла проблема, заключается в том, что SecureStore сохраняет только строки. Вы совершенно правильно использовали JSON.stringify для преобразования объекта в строку, чтобы вы могли его сохранить, однако вам нужно преобразовать его обратно в объект.

Вы можете использовать JSON.parse, чтобы преобразовать вашу строку обратно в объект.

constructor(props){
  super(props)
  this.state = {
    UserData: {} // update this to an object
  }
}

componentWillMount() {
    SecureStore.getItemAsync('userData')
    .then((data) => {
        let UserData = JSON.parse(data) // you need to parse the string to json
        console.info(UserData); // you probably want to check what you have gotten back 
        this.setState({ UserData: UserData }) // then save the object to state
    });
}

Теперь, пока у вашего объекта есть ключи Firstname и Lastname, вы сможете получить к ним доступ следующим образом.

this.state.UserData.Firstname
this.state.UserData.Lastname

Ты жжешь! Спасибо за разъяснение, я многое узнал о том, что такое объекты и как их теперь использовать.

codGmer 14.02.2019 09:42

Другие вопросы по теме