💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 滑动之后按钮不能点击 添加了滑动功能之后,这些按钮都不让点击了。 ![](https://img.kancloud.cn/cb/2c/cb2c5af4e5c7c468b11f5dd3291fce80_644x538.png) 解决办法:在开启滑动功能时,关闭获取所有事件的功能: ![](https://img.kancloud.cn/81/b7/81b72f46b5a65c907a95aa018c2b0619_1436x1188.png) # 不同屏幕尺寸适配 布局时要注意,有些写死的坐标位置 ,在不同的屏幕尺寸上位置会不同。所以布局时尽量不要写死一定数字: ![](https://img.kancloud.cn/45/51/4551ca2366fdd8e95865b61c9973b86d_2268x434.png) 解决办法: 用一个 View 套起来,然后布局: ![](https://img.kancloud.cn/e0/aa/e0aa9c7f5cd54184c69c9b85220a611d_1344x1128.png) # 解决IOS手机带刘海的问题 官方提供了一个组件可以解决 IOS 手机上带刘海时被盖住的问题: ![](https://img.kancloud.cn/b9/ee/b9ee1686595099454941c9e7027d43a5_730x230.png) 解决办法: ![](https://img.kancloud.cn/53/a6/53a66ad2c41e3f4f4b50154dc3313ae1_1670x1334.png) ![](https://img.kancloud.cn/d2/40/d240cda25a6c18b6361926f987654689_724x236.png) # 解决首页评论嵌套 FlatList 组件的问题 在 RN 中如果一个 FlatList 组件中嵌套了另一个 FlatList 会导致内部的 FlatList 无法滚动加载,比如首页的评论就无法滚动: ![](https://img.kancloud.cn/5d/e2/5de2c0ac2e671efafd1975dc120e8cb6_962x1360.png) 嵌套 使用导航失效: ![](https://img.kancloud.cn/39/eb/39ebe27fa336d7fbce2c7d59954be483_2008x1106.png) 解决思路:把内层的 FlatList 拿出来放到首页的最外层组件中写。 在首页最外层(pages/main/Video.js) 中添加一个评论的框,把评论放到这里就互不影响了,都可以滚动了 ![](https://img.kancloud.cn/24/22/2422f22900d29fa6abdf937cad5bf17b_1952x1108.png) 问题:原来每个视频中自带一个评论列表,显示自己的评论,而现在这样改完之后,所有视频就要共用同一个评论列表,这就要注意评论数据传递的问题了,每当切换视频时,同时要切换评论框中的评论数据。 ## 先封装评论条目组件 把原来每个评论的组件单独写到一个文件中: ![](https://img.kancloud.cn/b4/d2/b4d21a8bb2d2003c8bf6956856ea56b4_1638x1422.png) ## 在首页评论框中使用 FlatList 组件来制作评论条目的列表 1. 先引入组件 ~~~ import CommentItem from '../../../components/comment/CommentItem'; ~~~ 2. 制作列表 ![](https://img.kancloud.cn/57/22/57221dd464064c193aeb4c06392076bd_1104x366.png) 效果:评论列表拿到首页 ![](https://img.kancloud.cn/63/f3/63f3031567b83c6040eb8337a254d4ba_672x1202.png) ## 把外层这个评论框单独制作成一个组件 我们应该把外层灰色的框制作成一个独立的可以打开、关闭的组件,然后以后可以直接使用,使用时里面可以放任何内容。 ### 封装 Panel 组件 通过 children 属性可以获取子组件的内容: ![](https://img.kancloud.cn/83/67/83673bcb3b94b316f8651037e50a9732_2760x734.png) ### 添加动画 为框添加一个关闭按钮并实现点击时的关闭动画 ![](https://img.kancloud.cn/8d/19/8d19a2e5bf1faa310afd784c50893d0a_822x1658.png) ### 控制组件的打开 现在我们需要其他组件(可能是父组件、也可能是兄弟组件,也可能是完全不在一个级别的组件)来控制这个组件的打开功能。 1. 定义一个用来打开这个面板的方法 ![](https://img.kancloud.cn/cb/e1/cbe187d62d236d4ec9c733a999dfc6ba_1448x1110.png) 2. 通过一个属性来控制是否调用这个函数 ![](https://img.kancloud.cn/ef/df/efdf9a7e2798d498aea826fefe17c20a_1074x1146.png) 现在其他组件就可以通过这个组件的 open 属性来控制是否打开了。 ### 添加一个 onClose 事件(双向绑定) 每当组件中关闭了面板时要通知父组件。 ![](https://img.kancloud.cn/0e/22/0e22ef53f76e0e2f2cecea4619f170a2_1192x1718.png) 到此有了 open 和 onClose 两个属性之后就实现了打开关闭功能的双向绑定,基本就可以使用了。 ## 跨层级使用这个 Panel 组件 难点:不同层级组件共享操作。 ![](https://img.kancloud.cn/3d/9d/3d9dbaa2e1707820e4edf4ebf0d86118_1720x1376.png) 1. 在 Video.js (父组件中)定义属性并绑定到 评论上 ![](https://img.kancloud.cn/c2/13/c21315d0a6e2e6fbd83b49533aac73a7_1502x1224.png) 2. 使用 Context 共享这个数据 2.1 创建 Context ![](https://img.kancloud.cn/3e/0d/3e0d5e2ad32c3eea97fb06062ab16202_1216x472.png) 2.2 使用 Context 共享数据 ![](https://img.kancloud.cn/d3/45/d345aed1793b47d64178a8d1d81da55b_1576x1158.png) 2.3 在子组件的评论按钮上调用这个共享的方法 在 VideoPlay 组件中引入并使用 ![](https://img.kancloud.cn/4c/ee/4ceef1ef56753544380d7f3d4bedb6de_1356x1642.png) 最后可以把 VideoPlay 中原来的打开评论的代码都删除,最终删除完之后: ![](https://img.kancloud.cn/69/c2/69c25698856bf142736200d7cefe0084_1190x1668.png)