javascript - 在保持状态的同时在 React 中切换布局
问题描述
我有一个用两种不同布局编写的小型 React Web 应用程序:一种用于桌面,另一种用于移动。我想将两者合二为一,根据窗口大小在布局之间切换。理想情况下,我会在应用程序的根目录有一个开关,如下所示:
const Root = () => {
return isMobile ? <MobileLayout /> : <DesktopLayout />;
}
大部分组件在两个布局之间重用,但也有少数组件依赖于状态,所以在布局之间切换会导致它们丢失。我可以重构布局,这样有状态的组件就不会有条件地呈现,但是有没有更好的方法来解决这个问题?
解决方案
我认为最简单的方法是在 React中提升状态。在布局切换期间应该保留的所有状态都应该放在Root
组件中,并作为道具传递给<MobileLayout />
和<DesktopLayout />
。如果需要从<MobileLayout />
或更新状态<DesktopLayout />
,您可以使用回调。
例如
const Root = () => {
const [someState, setSomeState] = useState({})
return isMobile ? <MobileLayout someState={someState} setSomeState={setSomeState}/> : <DesktopLayout someState={someState} setSomeState={setSomeState}/>;
}
在内部<MobileLayout />
,您可以使用 props 以相同的方式<DesktopLayout />
将从 down 接收到的 stets 传递给子组件。Root
推荐阅读
- reactjs - 更新 ScheduleComponent 中的字段后,选择处理程序在错误的字段键 (id) 下返回 EndTime 日期
- java - 使用 .next().get 时,Java LinkedList 不会从对象打印变量
- google-apps-script - 使用 CardService 的多选下拉菜单
- perl - Perl:如果找到匹配项,如何插入一行?
- .net - 使用 .NET 控制台应用程序监视剪贴板
- owl - protege 颗粒推断问题
- javascript - javascript中的数组数组到对象数组的数组
- ios - objc 方法在我的 JS 端没有被识别
- linux - AWS EC2 packet_write_wait:连接到 UNKNOWN 端口 65535:管道损坏
- ruby-on-rails - 添加新测试时,以前工作测试的权限被拒绝