Для официального Redux asyn c приложения , когда пользователь хочет увидеть Reddit topi c из "reactjs", "frontend" или "redux js", отправка просто отправляет объект действия:
{
type: SELECT_SUBREDDIT,
subreddit: 'frontend'
}
и затем позволяет componentDidUpdate(prevProps)
обрабатывать «побочный эффект» извлечения данных.
Я бы сделал это, не отправляя действие , но отправляя функцию:
dispatch(
dispatch => {
fetch(`https://www.reddit.com/r/${topic}.json`)
.then(response => response.json())
.then(data => {
dispatch({
type: "GOT_DATA",
data: data
})
});
}
)
Я думал, что мой подход более прост, и если использовать componentDidUpdate()
для создания побочного эффекта, компонент не будет визуализирован три раза? Первый для изменения топи c, второй раз для отправки состояния выборки (и с кодом для извлечения данных) и третий раз, когда данные возвращаются.
Этот подход на самом деле довольно интересно: сначала нужно «просто изменить состояние приложения, и я ничего не буду делать», а затем в коде жизненного цикла компонента класса (или в useEffect()
компонента функции) это так, «когда подпорки которые приходят (из состояния), говорят, что что-то должно быть сделано, я сделаю это, и при необходимости изменим больше состояния. "
Кроме того, первый способ сделать что-то, если мы посмотрим на исходный код , имеет так много состояний и условий. Это всего лишь простой пример получения некоторых тем Reddit. Что если существует 7 состояний и условий, то код будет настолько насыщен условиями, что обработка этого состояния истинна, а этого состояния нет, а третье состояние истинно и т. Д. c? Это может быть 2⁷ комбинации, и код так тесно связан - если менеджер просит изменить какое-либо поведение, это похоже на то, что программист должен переподключить все и проверить все условия, все действия, всю диспетчеризацию и т. Д. c. Это похоже на спагетти состояний и условий.
Я думал, что первоначальное намерение иметь этот MVC или компонентный способ ведения дел состоит в том, чтобы у нас был менее императивный код, но теперь мы на самом деле можем в конечном итоге больше кода (около 275 строк кода), и они обязательно распределяют действия, и сокращают, и обрабатывают все условия, и это даже сложнее, чем если бы мы делаем это обязательно.
Конечно, это показывает «Загрузка ... "и может кэшировать данные, и может разрешить refre sh ... но даже если это делается с помощью императивного кода, это может быть на самом деле более короткий код, и он более прямой и его легче понять .
Я бы хотел знать, какие могут быть методы: должны ли мы, или в лучшем случае, следовать примеру исходного кода кода, или мы можем сделать это вторым методом, как описано выше - разве не рекомендуется отправлять функцию, которая выполняет асинхронную обработку c или "побочный эффект"?