React JS выдает ошибку «TypeError: не удается прочитать имя свойства неопределенного», когда я хочу получить доступ к сведениям об объекте

Я хочу показать свои данные о пользователях в модальном режиме, когда я нажимаю на свой список пользователей. Я передаю идентификатор пользователя в качестве реквизита модальному, и в модальном я нахожу пользователя с помощью метода javascript find() и user_id. этот метод возвращает моего запрошенного пользователя как объект, и я могу показать его с помощью console.info(), но когда я хочу получить доступ к свойствам объекта, например, «user.name» или «user.email», выдается ошибка: TypeError: Невозможно прочитать имя свойства неопределенного

//users.js code part

{ showUserDetails ? <div className = "ModalContainer" >
       <div className = "userModal">
           <div className = "modalBody">
               <span className = "close">X</span>
               <SelectedUser selectedUserId = {selectedUserId}/>
           </div>
       </div>
   </div> : <div></div>
}
// SelectedUser.js codes

import React from 'react';
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";

const SelectedUser = ({selectedUserId, users}) => {
    let user = users.find(user=> user.id === selectedUserId)
    console.info(user.name)
    return ( 
       <React.Fragment>
            <p><b>Name:</b> {user.name}</p>
            <p><b>User Name:</b> {user.username}</p>
            <p><b>Email:</b> {user.email}</p>
            <p>
                <b>Address:</b> 
                {`  ${user.address.suite}, ${user.address.street}, ${user.address.city}
                [zip Code: ${user.address.zipcode}]
                `}
            </p>
            <p><b>Phone: </b>{user.phone}</p>
            <p><b>WebSite: </b>{user.website}</p>
            <p><b>Company: </b>{user.company.name}</p>
       </React.Fragment>
     );
}

const mapStateToProps = state => ({
    users: Object.values(state.users.users)
})


export default withRouter(connect(mapStateToProps)(SelectedUser));

Отрисовывается ли компонент SelectedUser до того, как хранилище избыточности будет заполнено?

Fush 07.05.2019 08:45

@Саид! Только что написал вам ответ, дайте мне знать, если это полезно для вас. :)

Chris Ngo 07.05.2019 09:15

@ChristopherNgo, извини, Крис, в последние дни у меня были проблемы...

Saeid Barzegar 10.05.2019 09:02

@SaeidBarzegar, как дела, друг?

Chris Ngo 10.05.2019 09:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
662
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В вашем компоненте SelectedUser вы должны проверить, доступно ли состояние пользователей перед рендерингом.

import React from 'react';
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";

const SelectedUser = ({selectedUserId, users}) => {
    let user;
    let content;
    if (users && users.length > 0){
        user = users.find(user=> user.id === selectedUserId);
    } else {
        return <div>Loading....</div>
    }

    if (Object.keys(user).length >= 0){
       content = (<React.Fragment>
            <p><b>Name:</b> {user.name}</p>
            <p><b>User Name:</b> {user.username}</p>
            <p><b>Email:</b> {user.email}</p>
            <p>
                <b>Address:</b> 
                {`  ${user.address.suite}, ${user.address.street}, ${user.address.city}
                [zip Code: ${user.address.zipcode}]
                `}
            </p>
            <p><b>Phone: </b>{user.phone}</p>
            <p><b>WebSite: </b>{user.website}</p>
            <p><b>Company: </b>{user.company.name}</p>
       </React.Fragment>)
   } else {
       content = "Loading"
   }
   return(
      <div>{content}</div>
   )
}

const mapStateToProps = state => ({
    users: Object.values(state.users.users)
})


export default withRouter(connect(mapStateToProps)(SelectedUser));

Я тестирую ваше решение... но оно не работает... основная проблема в том, что компонент может найти пользователя, я вижу его в консоли, тип информации о найденном пользователе - это объект ( typeOf()).... но когда Я хочу, чтобы приложение свойств возвращало значение null !!!

Saeid Barzegar 10.05.2019 09:03

классно! не беспокойтесь, дайте мне знать, если это работает для вас.

Chris Ngo 10.05.2019 09:04

Как вы думаете, проблема в выводе метода find()?

Saeid Barzegar 10.05.2019 09:08

О да, определенно, я не знаю, что случилось с моим решением, ха-ха. Позвольте мне обновить его для вас.

Chris Ngo 10.05.2019 09:12

@SaeidBarzegar, хорошо, попробуйте и дайте мне знать, если у вас возникнут какие-либо ошибки.

Chris Ngo 10.05.2019 09:14

спасибо, чувак ... это сработало ... но я запутался ... данные, вызываемые из vuex, почему они имеют задержку?

Saeid Barzegar 10.05.2019 09:21

Давайте продолжить обсуждение в чате.

Chris Ngo 10.05.2019 09:22

@SaeidBarzegar Это может быть комбинация вещей. Иногда, когда вы передаете реквизиты тому или иному компоненту, для перемещения этих данных по потоку требуется время. Но ваш компонент все равно попытается отобразить себя, даже если у него еще нет всех данных. Кроме того, если вы пытаетесь получить данные из API, он следует тому же принципу, для передачи данных требуется время, поэтому его хорошо настроить свою логику для учета этого времени сценария.

Chris Ngo 10.05.2019 09:26

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