• Geek_e6b8eb
    置顶
    2022-03-28
    真的后悔没有早一点看到这个课程,之前我就维护了很多中间代码,最后弄得一个组件超级复杂。 /(ㄒoㄒ)/~~
    
    3
  • Isaac
    2021-06-10
    思考题回答: 由于 hisgory.pushState 不会触发页面重新渲染,也不会导致组件更新,所以,默认的 userSearchParams 只会获取第一次的 URL 上的查询字符串。因此,为了解决这个问题,可以通过监听 pushstate、replaceState 等事件,对状态进行同步。 其实去阅读 react-us 的源码实现,也是采用了这种办法。 https://github.com/streamich/react-use/blob/90e72a5340460816e2159b2c461254661b00e1d3/src/useSearchParam.ts#L8

    作者回复: 赞~ history API 是比较特别的,只能用 patch 的方法来监听 url 变化。

    共 5 条评论
    15
  • Jerryz
    2021-06-10
    默认 history.pushState 和 history.replaceState 都没有对应的监听事件。react-use patch 了history 对象。

    作者回复: 👍

    共 3 条评论
    8
  • Geek_0330fe
    2021-07-18
    react-use 的 useSearchParams 中也使用了一个 state 去维护了一个状态,这是不是说明复杂度不会消失,只会转移呢?我们只是把我们本来要维护的那个状态交给第三方库去维护了。

    作者回复: 第三方库的目的正是简化你的应用逻辑。其内部如何实现都不会影响你的应用的复杂度,也无需关系它内部如何实现。

    共 2 条评论
    4
  • Geeker
    2021-06-10
    状态最小化原则直接影响了代码的复杂度

    作者回复: 可以说,直接降低了代码复杂度~

    
    4
  • Isaac
    2021-06-10
    老师,文章中的列表筛选的例子,虽然使用 useMemo 可以缓存,但是如果多个组件实例用到,岂不是还是会出现多次计算?

    作者回复: 是的,跨组件的数据共享就需要 Redux 这样的全局状态管理机制了。

    共 8 条评论
    3
  • 守望
    2021-06-10
    这是不是和单向数据流差不多呀!!! 数据流向总是一条线,不要开新分支

    作者回复: 虽然看上去有点像,但不太一样哦~

    
    2
  • 傻子来了快跑丶
    2021-06-10
    // 每当 searchKey 或者 data 变化的时候,重新计算最终结果 老师这个地方有问题吧,一般我们是通过关键字去拿接口的data数据,你这个demo data数据并不是通过keyword获取过来的,而是直接传入的一个data,是有问题的,应该通过状态提升,也就是 const filtered = useMemo(() => { return data.filter((item) => item.title.toLowerCase().includes(searchKey.toLowerCase()) ); }, [searchKey, data]); 这段代码应该在父组件中,拿到data数据之后再传进去

    作者回复: 数据处理为什么要在父组件呢?

    共 4 条评论
    2
  • 寇云
    2021-06-12
    老师第一个例子中,数据的请求放到当前组件中好还是由外部传入好?
    
    2
  • 吴颜
    2023-09-07 来自北京
    有个问题就是什么时候要用useMemo和useCallback来改善性能而不是直接让组件直接循环执行,这是性能与代码简洁性的平衡
    
    