ステータスの複数の状態を使用する
8520 ワード
を使用してAPIデータを取得する場合
次のようなことができます.
だから今では、はるかにきれいで管理するために簡単になる次のとおりです.
私は、ケントCドッドによってこのようにするためにインスピレーションを得ました.詳細情報here
fetch
ユーザーを更新する方法や条件付きのコードを実行する方法があります.これは一般に、異なる状態の選択を使用することを意味する.これは潜在的に厄介な複雑なことができます.次のようなことができます.
const [data, setData] = useStatus([])
const [success, setSuccess] = useState('')
const [loading, setLoading] = useState('')
const [rejected, setRejected] = useState('')
const [error, setError] = useState('')
これは次のようになります.useEffect(() => {
setLoading('loading') // state 1
fetch('http://some-api-url')
.then(response => {
setData(response)
setSuccess('success') // state 2
})
.catch(err => {
setError(err)
setRejected('rejected') // state 3
})
}, [])
上記で、我々は管理して、目を保つために、3つの州を持ちます.それが条件付きでそれを使用することになるとき、それはASAの痛みであるでしょう.if (success === 'success') {
//do something
} else if ( loading === 'loading' ) {
// do something
} else if (rejected === 'rejected') {
// do something
}
今では、使いやすくなりませんstatus
他の3つの状態を心配するのではなく、状態.我々は何かを含めることができますconst [status, setStatus] = useStatus('idle')
そして他のすべての状態をsetData
and setError
エラーメッセージの表示を処理できるように、エラー状態が必要です.だから今では、はるかにきれいで管理するために簡単になる次のとおりです.
const [data, setData] = useStatus([])
const [error, setError] = useState('')
const [status, setStatus] = useState('idle')
useEffect(() => {
setStatus('loading')
fetch('http://some-api-url')
.then(response => {
setData(response)
setStatus('success')
})
.catch(err => {
setError(err)
setStatus('rejected')
})
}, [])
if (status === 'success') {
// do something
} else if ( status === 'loading' ) {
// do something
} else if (status === 'rejected') {
// do something
}
私にとって、これははるかにきれいな方法をすることです、私はそれが複数の州を使用することとそれほど異なるということを知っています.しかし、我々は3つの代わりに対処する1つの状態があります.私は、ケントCドッドによってこのようにするためにインスピレーションを得ました.詳細情報here
Reference
この問題について(ステータスの複数の状態を使用する), 我々は、より多くの情報をここで見つけました https://dev.to/mrpbennett/stop-using-multiple-states-for-status-phfテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol