V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  sweetcola  ›  全部回复第 5 页 / 共 5 页
回复总数  94
1  2  3  4  5  
2021-10-21 11:52:04 +08:00
回复了 johnkiller 创建的主题 React React+异步任务 的疑问
分析了一下,不太对劲,不应该输出两次。在 codesandbox 里调试一下,确实只输出了一次。你的 React 版本是 18 并且用上了 Strict Mode 吗(我也没用过,不太确定)?
2021-08-19 16:36:34 +08:00
回复了 ciming 创建的主题 Edge edge 浏览器自带的翻译功能真的比不上 chrome
可以试试 Edge 商店里的 Sc 翻译 里的 Google 网页翻译。虽然面对新元素的插入也是一样不能直接翻译,需要手动关闭后再启用,但起码能用。
可以把数据拆分成几个 reducer(slice) 放进 Redux 里,把 state 下沉到子组件。
2021-06-24 21:13:53 +08:00
回复了 yazoox 创建的主题 React 请教一个,有关 react 的 re-render 的性能小问题
> button1 和 button2 的用法,还有区别么?
没有区别。因为一旦渲染你写在外面和 onClick 里面都一样是动态生成的函数。
不过差别也有,就是非匿名函数和匿名函数的区别(也就是没什么区别)。

> 不过,当 handleClick 比较复杂时,应该可以通过 useCallback 提高性能
如果函数不影响重渲染的情况下用不用没有区别,甚至用了还会降低效率(依赖的比较)。因为就算你用了 useCallback,在重渲染的那一刻依然会生成一个函数,只是依赖没有变所以没有替换(以我理解)。

> 跟踪一下,触发了多少次 render ?
在组件里 console.log('Render'); 就可以了。
2021-06-22 17:15:34 +08:00
回复了 buddie 创建的主题 React 一个 React re-render 导致 html5 视频无法播放的问题
这个问题主要是 URL.createObjectURL(video) 这一段。

触发 re-render 后,React 会重新计算所有的值,包括 src={URL.createObjectURL(video)} 这一段。所以每当 re-render 后都会看上去停止了,实际上是因为 src 被重新计算了。

解法可以像你 3L 说的那样,也可以在不改动原来代码的基础上用 useMemo 。

```
const objURL = useMemo(() => {
return video ? URL.createObjectURL(video) : undefined
}, [video])

...

src={objURL}
```
2021-06-22 15:52:21 +08:00
回复了 yazoox 创建的主题 React react-dnd 有没有用得比较好的兄弟,请教一下?
自己实现一个就可以了。

> 现在我希望这个 panel 可以用鼠标拖动到屏幕 /页面中的任何位置
用 position: fixed; 加上 left 和 top 就能解决。

> 只有 header 那个“部分”(红色框)能够响应鼠标的拖动
给 header 绑定 onMouseDown 事件,一旦 mousedown 触发了就开始监听 window.onmousemove 和 window.onmouseup 。在 mousemove 里计算当前位置({ left, top })并返回。监听 window.onmouseup 触发后可视作取消拖动的事件,取消监听 onmousemove 和 onmouseup,发送拖动完毕的信号。
2021-06-18 18:18:11 +08:00
回复了 happyCodings 创建的主题 Vue.js 求大佬们优化一下代码,屎山代码给孩子头皮想破了
叠 buff 的来了(仅供娱乐)

const data =[{"province":"上海市","city":"上海市市辖区","adcode":"310118","district":"青浦区"},
{"province":"江苏","city":"苏州市","adcode":"320506","district":"吴中区"},
{"province":"山西省","city":"阳泉市","adcode":"140302","district":"城区"},
{"province":"上海市","city":"上海市市辖区","adcode":"310101","district":"黄浦区"},
{"province":"河北省","city":"石家庄市","adcode":"130123","district":"正定县"}];

var obj = Object.keys(obj = data.reduce((t, c) => ({ ...t, [c.province]: { ...t[c.province], [c.city]: { ...t[c.province]?.[c.city], [c.district]: c.adcode } } }), {})).map((v) => ({ name: v, children: Object.keys(obj[v]).map((v1) => ({name: v1, children: Object.keys(obj[v][v1]).map((v2) => ({ name: v2, value: obj[v][v1][v2]})) })) }));

console.log(obj);
2021-04-09 11:06:57 +08:00
回复了 xingguang 创建的主题 React 关于 hooks 的问题,也不知道是不是我脑子短路了,想不出来
我看你好像是需要根据 data 变化后执行 post,所以你可以试试这样做。用 useRef 来储存第一次获得的 data,在第二个 useEffect 进行 ref 和 data 是否相等判断。

代码:
const dataRef = useRef();
const handleSetData = (data) => {
setData(data);
dataRef.current = data;
}
useEffect(() => {
const fn = async () => {
const res = await axios.get(xxx);
handleSetData(res);
};
fn();
}, []);
useEffect(() => {
if (dataRef.current === data) { return; }
axios.post(xxx); // 如果 xxx 里涉及到 setData,用 handleSetData 代替
}, [data])
2021-03-23 19:14:31 +08:00
回复了 miloooz 创建的主题 问与答 前端问题求助大佬(react)
你没把 add 函数放进 DependencyList 里,不放进去的话永远调用最开始拿到的 add 函数。
最开始的 add 函数输出的永远是最开始的 progress 。
可以试试清除缓存,昨天我也发现在 edge 上可以看番剧而一直在用的 chrome 却不行。打开 F12 发现只有 chrome 报语法错误。后来就知道了是因为在 edge 上我没有使用过 B 站所以也就没有缓存过,在 chrome 上报错的那个文件是来自缓存的,也就是说 B 站在修复后并没有更改文件名称。我在清除了缓存之后就恢复正常了。
2019-07-26 11:42:49 +08:00
回复了 mu666 创建的主题 职场话题 吐槽,现在公司是不是觉得应届毕业生没有技术
我可能比你好一点 但是也差不多 我是在一个三线城市找工作 基本没有人事面 都是直接技术面 但是即使表现得再好(甚至觉得自己的技术要比面试官更好) 最后都是以回去等消息告终 这可能就是三线+行情+没有工作经验的结果吧(我的毕设搭档去深圳直接现在 20W 了 唉)
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1799 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 00:24 · PVG 08:24 · LAX 17:24 · JFK 20:24
Developed with CodeLauncher
♥ Do have faith in what you're doing.