平时开发遇到的问题

1.video视频ios无法播放

ios和安卓对视频请求字节不一样。需要后端对视频输出进行断点续传 

2. 切换清晰度,指定特定时间播放

视频流无法快进导致 

3.修改iframe内页面

跨域页面无法修改。进行css遮盖, 或者传参数,在被套页面进行调整 

4.通用组件内window.xx事件,后面的页面会覆盖前面的事件,导致只最后一个显示的组件生效

用addEventListener绑定,可以绑定多个,不会覆盖

5.设置1rem=10px时, 1rem显示成12px

 谷歌浏览器最小字体为12px,小于这个标准都会按12显示。调整rem基数

6.接口返回response和preview数据不一样

因为数据为Long型,返回给浏览器以后,浏览器转换数据格式的时候出现问题。

解决方案:返回数据之前就将数据转换为字符串,这样结果就是正确的。 

7. 实现tab组件,hover进行选中态, 移入一级, 二级, 三级要组件默认的hover效果, 移出的时候,要根据上次点击的内容进行选中态修复。

思路:mouseout进行数据对比修复选中态

如果使用onmouseout,进入子盒子也会触发父盒子的out事件。会触发父盒子的out逻辑,就算写延时处理,需要对所有的子盒子进行绑定,然后清除父盒子的延时函数, 很麻烦。

使用onmouseleave事件。离开大盒子时触发,进入子盒子不会触发。就可以完美的将移出逻辑统一处理了

8 . vue用watch观察对象的属性改变,不被触发

https://blog.youkuaiyun.com/bangbDIV/article/details/114625343?spm=1001.2014.3001.5501

9. 欧朋浏览器 axios请求不进入then,catch后续处理

问题现象:一个弹层页面,在弹层页面点击一个提交,然后关闭弹层,触发外部列表刷新。但是列表请求network中是有的,但是axios后续逻辑不执行。也不报错。

原因:关闭弹窗和请求外部列表没有产生线程间隔,欧朋浏览器认为axios是个无用的请求,结束后就给取消了任务执行。

解决办法:关闭弹层之后 ,setTimeout内触发列表请求,就可以了。

在使用 React Hooks 进行开发时,需要注意以下几个常见问题及其原因分析: ### 1. **只在顶层调用 Hooks** React 要求在函数组件或自定义 Hooks 中只能在最顶层调用 Hooks,不能在条件语句、循环或嵌套函数中调用。这是因为 React 依赖 Hooks 的调用顺序来保持状态的一致性。如果在条件语句中调用 Hooks,可能会导致状态混乱或出现意外行为。例如,以下代码会导致错误: ```javascript function ExampleComponent({ condition }) { if (condition) { const [state, setState] = useState(0); // ❌ 错误:不能在条件语句中调用 useState } } ``` 正确的做法是将条件逻辑放在 Hooks 之外,确保 Hooks 的调用顺序始终保持一致: ```javascript function ExampleComponent({ condition }) { const [state, setState] = useState(condition ? 0 : null); // ✅ 正确:条件逻辑在初始化时处理 } ``` ### 2. **避免在循环、条件或嵌套函数中调用 Hooks** Hooks 的调用顺序必须在每次渲染时保持一致,否则 React 无法正确维护状态。例如,以下代码会在不同渲染中导致 Hooks 的调用顺序不一致,从而引发错误: ```javascript function ExampleComponent({ count }) { if (count > 0) { const [state, setState] = useState(0); // ❌ 错误:在条件语句中调用 Hooks } } ``` 解决方法是确保 Hooks 的调用位置固定,避免将其放在条件语句、循环或嵌套函数中。可以通过将条件逻辑移到 Hooks 之外来解决: ```javascript function ExampleComponent({ count }) { const [state, setState] = useState(0); if (count <= 0) { return null; // ✅ 正确:Hooks 调用顺序保持一致 } } ``` ### 3. **避免不必要的重新渲染** 使用 `useEffect` 时,如果依赖项数组未正确设置,可能会导致组件频繁重新渲染,影响性能。例如,以下代码会在每次组件更新时都触发副作用: ```javascript function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { console.log("Count changed"); }, []); // ❌ 错误:依赖项数组为空,副作用仅在挂载时执行 } ``` 为了确保副作用仅在特定依赖项变化时执行,应明确指定依赖项数组: ```javascript function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { console.log("Count changed"); }, [count]); // ✅ 正确:副作用仅在 count 变化时执行 } ``` ### 4. **循环引用问题** 在使用 React Hooks 时,可能会遇到循环引用问题,即两个组件相互引用,导致无法正确渲染。为了避免循环引用,可以使用 `React.lazy` 和 `Suspense` 来按需加载组件。例如: ```javascript const LazyComponent = React.lazy(() => import('./LazyComponent')); function ParentComponent() { return ( <React.Suspense fallback="Loading..."> <LazyComponent /> {/* ✅ 正确:使用 React.lazy 和 Suspense 避免循环引用 */} </React.Suspense> ); } ``` ### 5. **合理使用 `useEffect`** `useEffect` 是处理副作用的强大工具,但不当使用可能导致性能问题或逻辑错误。例如,以下代码会在每次组件更新时都执行副作用: ```javascript function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { console.log("Component updated"); }); // ❌ 错误:缺少依赖项数组,副作用在每次渲染时都执行 } ``` 为了解决这个问题,应根据需要指定依赖项数组: ```javascript function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { console.log("Count changed"); }, [count]); // ✅ 正确:副作用仅在 count 变化时执行 } ``` ### 6. **使用自定义 Hooks 复用逻辑** 自定义 Hooks 是复用逻辑的有效方式,但需要注意保持 Hooks 的单一职责原则。例如,以下自定义 Hooks 可以用于管理表单状态: ```javascript function useForm(initialValues) { const [values, setValues] = useState(initialValues); const handleChange = (e) => { setValues({ ...values, [e.target.name]: e.target.value }); }; return { values, handleChange }; // ✅ 正确:自定义 Hooks 管理表单状态 } ``` 在组件中使用自定义 Hooks: ```javascript function LoginForm() { const { values, handleChange } = useForm({ username: '', password: '' }); return ( <form> <input name="username" value={values.username} onChange={handleChange} /> <input name="password" value={values.password} onChange={handleChange} /> </form> ); } ``` ### 7. **避免不必要的重新渲染** 使用 `useMemo` 和 `useCallback` 可以优化性能,避免不必要的重新渲染。例如,以下代码可以避免在每次渲染时都创建新的函数: ```javascript function ExampleComponent({ count }) { const memoizedCallback = useCallback(() => { console.log(count); }, [count]); // ✅ 正确:使用 useCallback 避免不必要的函数创建 } ``` 同样,`useMemo` 可以用于避免在每次渲染时都重新计算值: ```javascript function ExampleComponent({ a, b }) { const memoizedValue = useMemo(() => { return a + b; }, [a, b]); // ✅ 正确:使用 useMemo 避免不必要的计算 } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值