Я хочу показать свои данные о пользователях в модальном режиме, когда я нажимаю на свой список пользователей. Я передаю идентификатор пользователя в качестве реквизита модальному, и в модальном я нахожу пользователя с помощью метода 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));
@Саид! Только что написал вам ответ, дайте мне знать, если это полезно для вас. :)
@ChristopherNgo, извини, Крис, в последние дни у меня были проблемы...
@SaeidBarzegar, как дела, друг?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем компоненте 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 !!!
классно! не беспокойтесь, дайте мне знать, если это работает для вас.
Как вы думаете, проблема в выводе метода find()?
О да, определенно, я не знаю, что случилось с моим решением, ха-ха. Позвольте мне обновить его для вас.
@SaeidBarzegar, хорошо, попробуйте и дайте мне знать, если у вас возникнут какие-либо ошибки.
спасибо, чувак ... это сработало ... но я запутался ... данные, вызываемые из vuex, почему они имеют задержку?
Давайте продолжить обсуждение в чате.
@SaeidBarzegar Это может быть комбинация вещей. Иногда, когда вы передаете реквизиты тому или иному компоненту, для перемещения этих данных по потоку требуется время. Но ваш компонент все равно попытается отобразить себя, даже если у него еще нет всех данных. Кроме того, если вы пытаетесь получить данные из API, он следует тому же принципу, для передачи данных требуется время, поэтому его хорошо настроить свою логику для учета этого времени сценария.
Отрисовывается ли компонент
SelectedUserдо того, как хранилище избыточности будет заполнено?