【发布时间】:2020-06-12 20:35:11
【问题描述】:
我想做的事:
- 我有各种独立的组件,它们在自己内部管理自己的状态。每个组件的状态绝对应该在每个组件内处理。
- 它们的初始状态来自后端。在此之后,它们会保持自己的状态。
- 我不想为每个组件发出大量单独的请求,所以我发出一个请求来获取所有组件的数据,然后将其传递下去,为每个组件提供初始数据。
我目前的解决方案:
const MyApp = () => {
const [initialState, setInitialState] = useState();
useEffect(()=>{getInitialState().then((data)=>{
setInitialState(data);
})},[])
if (!initialState) {
return <div>Loading...</div>
}
return (
<>
<ComponentA initialData={initialState.A} />
<ComponentB initialData={initialState.B} />
<ComponentC initialData={initialState.C} />
</>
)
}
我当前解决方案的问题:
上述方法有效,但感觉不对。我已经调用了上述initialState,但它不应该是状态。它更像是一个道具,在应用程序的整个生命周期中存储初始数据会令人困惑。诚然,它没有做任何事情,也不会造成任何伤害,但如果它没有被任何东西使用,为什么还要保留它呢?
我什至考虑在渲染应用程序之前获取数据,然后将数据作为道具传递,但是我不会显示任何内容,而是显示加载屏幕,因此这似乎也不是一个好方法。
我的问题:
是否有更好(和/或标准)的方法来实现上述目标? (我想使用钩子而不是类)。也许上面的想法不是一个坏主意,但感觉可能必须有更好的方法来做到这一点,而无需诉诸“全球”应用程序状态。我想让我的状态靠近使用它的相关部分的组件。
【问题讨论】:
-
如果你使用 redux,redux-persist 是一个不错的选择。它只保存你想要的那些reducer,并且它比异步请求恢复状态更快。
-
我认为您需要一个状态管理层来保存全局应用程序上下文。 Redux 或 Mobx,或者只是 React Context API 可以帮助您将全局状态保存在一个地方,组件可以在那里找到它们需要的东西。如果您愿意,我可以详细说明。
标签: reactjs react-hooks state