返回
反 React 范式思考:设计一个符合范式的加载状态
前端
2023-12-12 13:58:13
通常,我们倾向于在 store 中定义加载状态,并使用一系列 action、transform 和 mutation 来管理它。然而,这会导致代码复杂性和维护困难。让我们探索一种反范式的方法,使用一个简单的组件来管理加载状态,从而简化我们的代码。
在 React 中,我们通常将加载状态存储在 Redux store 中。然而,这会导致代码复杂性,因为我们需要编写大量的样板代码来处理 action、transform 和 mutation。
本文提出了一种反范式的方法,使用一个简单的组件来管理加载状态。这种方法的优点是:
- 代码简化: 我们不再需要编写样板代码来处理 action、transform 和 mutation。
- 可维护性提高: 加载状态的管理集中在一个组件中,便于维护和理解。
- 可重用性: 我们可以将该组件重用于其他需要管理加载状态的组件中。
让我们来看看如何使用这个组件:
import React, { useState } from 'react';
const LoadingState = () => {
const [isLoading, setIsLoading] = useState(false);
const startLoading = () => {
setIsLoading(true);
};
const stopLoading = () => {
setIsLoading(false);
};
return (
<div>
{isLoading ? <div>Loading...</div> : <div>Content</div>}
</div>
);
};
export default LoadingState;
我们可以使用这个组件来管理任何组件的加载状态。例如,我们可以使用它来管理列表组件的加载状态:
import React from 'react';
import LoadingState from './LoadingState';
const List = () => {
const [isLoading, setIsLoading] = useState(true);
const [data, setData] = useState([]);
useEffect(() => {
fetch('https://example.com/data.json')
.then(res => res.json())
.then(data => {
setData(data);
setIsLoading(false);
})
.catch(error => {
console.error(error);
setIsLoading(false);
});
}, []);
return (
<div>
<LoadingState isLoading={isLoading} />
{data.map(item => <li key={item.id}>{item.name}</li>)}
</div>
);
};
export default List;
使用这个组件,我们可以轻松地管理列表组件的加载状态,而无需编写大量的样板代码。
总之,使用简单的组件来管理加载状态是一种反范式的方法,可以简化代码、提高维护性并提高可重用性。