Выполнение вызовов API с помощью React для извлечения данных и их рендеринга

Я новичок в React и хочу понять отличие от классического MVC. Я хочу создать простые компоненты, которые изначально загружают некоторые данные и отображают, скажем, сетку. При изменении состояния или реквизита он перезагрузит данные и повторно отрендерит.

Как лучше всего реагировать на два варианта ниже?

  1. использование событий жизненного цикла для загрузки данных, обновления некоторого состояния и рендеринга, в то время как в другом событии будет отображаться некоторая непрозрачность загрузки.

  2. Работать с редуксом и реагировать-редуксом? но во всех примерах я не вижу вызовов API. Это роль промежуточного программного обеспечения (Thunk?)?

Будет соответствующее объяснение.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
368
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Оба подхода верны. Это зависит от вашего варианта использования. Если вы можете избежать использования избыточности в своем приложении, используйте методы жизненного цикла для выполнения вызовов API (также называемых подписками в документации по реакции). Если вы считаете, что в вашем приложении много компонентов, и разные компоненты должны иметь общее состояние, используйте избыточность.

Вы также должны посмотреть на хуки React https://reactjs.org/docs/hooks-reference.html Вы можете использовать эффект-хук https://reactjs.org/docs/hooks-effect.html для выполнения вызовов API и обновления состояния вашего компонента.

Обновлять:

И Thunk, и Sage используются для управления побочными эффектами в вашем приложении (выполнение вызовов API отсюда). Я использовал сагу, я мало знаю о thunk.

Как бы вы использовали redux-saga: Скажем, если вы хотите получить некоторые данные для отображения при нажатии кнопки, вот как это работает:

  • При нажатии кнопки вы отправляете действие, скажем, GET_DATA
  • Ваш редукционный редуктор изменит некоторое состояние этого конкретного действия, скажем, isLoading=true
  • Вы можете использовать isLoading в своем компоненте, чтобы показать счетчик/наложение
  • В то же время сага будет прослушивать действие GET_DATA и выполнять вызов API.
  • В случае успеха из Saga вы отправите действие, скажем, GET_DATA_SUCCESS с данными из вызова API.
    • Редюсер изменит isLoading=false и установит данные в состояние, скажем, apiData = { ... }
  • В случае сбоя из Saga вы отправите действие, скажем, GET_DATA_FAILED с кодом/сообщением об ошибке.
    • Редьюсер изменит isLoading=false и установит ошибку в состоянии, скажем, apiError = { ... }
  • Теперь вы можете использовать isLoading=false в своем компоненте, чтобы удалить счетчик и отобразить данные (apiData) или ошибку (apiError) в вашем компоненте.

Вы можете пройти это руководство, чтобы узнать больше https://redux-saga.js.org/docs/introduction/BeginnerTutorial.html

да. Только что посмотрел видео с конференции React 2018, где они представили хуки. Это просто способ сделать то же самое с функциональными компонентами.

Pinidbest 09.02.2019 12:32

Однако можете ли вы объяснить, что такое Thunk?

Pinidbest 09.02.2019 12:43

Объяснение было слишком большим для комментария. Я обновил свой ответ с объяснением.

Yusufali2205 09.02.2019 21:03

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