Модель для React является более декларативным подходом, в то время как код, который вы здесь видите в componentDidUpdate
, является более императивным подходом.Как правило, в React представление изменяется в зависимости от состояния приложения, поэтому в вашей функции рендеринга вы получите что-то вроде
render() {
if (this.props.loading) {
return <LoadingComponent />
}
if (this.props.error) {
return <ErrorSnackBar />
}
return <SuccessSnackBar />
}
. Этот декларативный подход облегчит рассмотрение и поддержку вашего приложения вдолгосрочный.
Если вам НУЖНО использовать императивный код для чего-то подобного, то вы захотите связать его именно с теми частями состояния, от которых зависят изменения.В вашем случае вы хотите отобразить панель с ошибками, когда есть ошибка, и панель с удачами, если она есть.Ваш текущий код излишне связывает состояние загрузки с этими отдельными частями представления.Вы хотели бы использовать что-то вроде
componentDidUpdate(prevProps) {
if (!prevProps.error && this.props.error) {
// An error has occurred! Notice how *any* time an error occurs this
// will run, not just when loading state changes
this.enqueueSnackBar(this.props.error, 'error')
}
if (!prevProps.fetchedData && this.props.fetchedData) {
// The data has been fetched! Do your stuff here.
this.enqueueSnackBar("Success!", "success")
}