Я видел, как многие разработчики (включая меня) выполняли условный рендеринг, проверяя значение переменных следующим образом:
import React, { useState, useMemo } from 'react'
const Page = () => {
const [data, setData] = useState<any[]>()
if (!data) return 'Loading...'
if (data.length === 0) return 'Empty'
if (data && data.length > 0) {
return data.map(item => item)
}
return null
}
Но я не думаю, что это достаточно явно говорит о состоянии страницы и о том, что он должен оказать. Так что я подумал, есть ли способ сделать что-то вроде этого:
import React, { useState, useMemo } from 'react'
enum PageStatus {
loading,
empty,
withResults
}
const Page = () => {
const [data, setData] = useState<any[]>()
const status = useMemo(() => {
if (!data) {
return PageStatus.loading
}
if (data.length > 0) {
return PageStatus.withResults
}
return PageStatus.empty
}, [data])
if (status === PageStatus.empty) {
return 'Empty'
}
if (status === PageStatus.withResults) {
return data.map(item => item)
}
return null
}
К сожалению, Typescript не распознает правильный тип данных в последнем выражении. Вы можете поиграть и увидеть ошибку здесь, на TS Playground . Возможно, есть способ привести / связать переменную во время выполнения, но я не нашел ничего связанного с этим.
Итак, знаете ли вы, возможно ли, чтобы условные визуализации были ориентированы на состояния / состояние вместо отдельных значений переменных? Или даже лучше? Я ценю вашу помощь, спасибо.