Skip to content

Решение ДЗ 8-го урока и доработка 7-го#12

Open
AlexandraYashina wants to merge 2 commits into
LeonEsquire:masterfrom
AlexandraYashina:master
Open

Решение ДЗ 8-го урока и доработка 7-го#12
AlexandraYashina wants to merge 2 commits into
LeonEsquire:masterfrom
AlexandraYashina:master

Conversation

@AlexandraYashina

Copy link
Copy Markdown
Contributor

Лев, снова здравствуйте!

У меня возник ряд вопросов по выполнению домашки и по React вцелом:

  1. В решении ДЗ 8-го урока я так и не поняла, как реазультат useEffect(() => {
    props.dispatch(fetchUsers()); }, []); отправить в const [usersList, setUserList] = useState([]);, посмотрите, пожалуйста, закомментированные строчки в файле UsersList.js в папке AlexandraYashina\Homework_8\functional_components\src\components.

  2. Буду также благодарна, если посмотрите доработанный 7-й урок (папка AlexandraYashina\Homework_7_updated), я переписала все оставшиеся компоненты из 5-го урока также на Redux и поправила Ваши замечания.

  3. Вот мы создаем две папки: components и pages. Я никак не могу понять логику того, почему такое разграничение? В pages вроде как должны лежать шаблоны страниц.
    Но при этом на уроке 5 в файле pages/User.js у нас идет запрос на получение данных пользователя через axios - а компонент в components/User.js как раз занимается чисто отрисовкой (т.е. по сути шаблоном страницы). Потом вот ДЗ по уроку 7: Вы мне написали, что components/User.js должен только отрисовывать (без каких-либо action'ов и изменения состояния в store). При этом компонент componens/UsersList у нас спокойно dispatch'ит action'ы. Может это я туплю, и просто не понимаю логику? Может надо просто переместить components/User.js в папку pages? Или какая логика тут должна быть? При этом components/Menu.js и components/MenuItem.js
    у нас тоже чисто отрисовывают, но при этом лежат в components.

  4. Если я делаю блог таким образом, что на странице "Пользователи" у меня есть блок с данными пользователя, а при клике на имя пользователя, открывается страница с таким же блоком, но и плюс еще добавляется кнопка "Показать комментарии": стоит ли просто задублировать часть кода, отвечающую за отрисовку блока, или можно каким-то образом делать проверку, какой компонент (какая страница) запрашивает этот код, и в зависимости от этого уже рисовать кнопку или не рисовать?

  5. Правильно ли я понимаю отличие props от state: props - это свойства компонента, которые приходят из-вне. Они постоянны на момент отрисовки компонента. А state - это состояние компонента (свойство), которое мы уже может в пределах компонента изменить.

Я надеюсь, это мои последние вопросы, и спасибо Вам большое за ответы и за курс вцелом!!! :)


const UsersList = props => {
//у меня строчка ниже получается вообще не используемая.
const [usersList, setUserList] = useState([]);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот тут у меня никак не получается отправить результата dispatch'a в usersList...

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а зачем? dispatch отправляет action редюсеру, который меняет стор, а за изменением стора следит компонент Provider - он перерисовывает приложение и предоставляет данные UsersList в качестве свойств объекта props

//у меня не получается в usersList отправить данные, полученные через props.dispatch(fetchUsers());
//закомментированный хук ниже не знаю как правильно переписать
// useEffect(() => {
// const usersData = props.dispatch(fetchUsers());

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

мы не сохраняли результат выполнение dispatch:)

// };
// }, []);
//как неправильное решение этой проблемы, в итоге в return просто обращаюсь напрямую к props.
//А надо ведь использовать данные из [usersList, setUserList]

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему?) Приложение реагирует на изменение массива в store, а не в state, лишний раз копируете данные:)

props.dispatch(fetchUsers());
}, []);

//вот здесь - мне приходится применять map к props.users, а должно быть usersList.map

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

у вас все правильно:) props.users здесь подходит)
С Redux можно вообще state только у store'a хранить, но лучше, конечно, и локальный state компонентов использовать в определенных местах

import {fetchUser} from '../actions/userActions';

const UserProfile = props => {
const [userInfo, setUserInfo] = useState(['']);

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const [userInfo, setUserInfo] = useState(['']);

убираем:)

const [userInfo, setUserInfo] = useState(['']);

useEffect(() => {
setUserInfo(props.dispatch(fetchUser(props.params.userId)));

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
setUserInfo(props.dispatch(fetchUser(props.params.userId)));
props.dispatch(fetchUser(props.params.userId));

вы могли бы написать setUserInfo(props.user), но смысла нет:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants