当前位置: 首页 > 知识库问答 >
问题:

javascript - useEffect 如何监控 useRef.current 里面的值发生变化(useRef不绑定dom)?

施兴言
2024-01-29

useEffect 如何监控 useRef.current 里面的值发生变化(useRef不绑定dom)?

    function handleWheel(e: TKWheelEvent) {        if (e.evt.ctrlKey) return        e.evt.preventDefault()        const direction = e.evt.deltaY > 0 ? -1 : 1        const stage = e.target.getStage()!        const oldScale = stage.scaleX()        const pointer = stage.getPointerPosition()!        const mousePointTo = {            x: pointer.x / oldScale - stage.x() / oldScale,            y: pointer.y / oldScale - stage.y() / oldScale,        }        const { MaxScale, MinScale } = ScaleRef.current        const newScale =                  direction > 0                      ? oldScale > MaxScale                          ? oldScale                          : oldScale * ScaleBy                      : oldScale < MinScale                          ? oldScale                          : oldScale / ScaleBy        stage.scale({ x: newScale, y: newScale })        ScaleRef.current = { // 这里发生了改变!            ...ScaleRef.current,            newScale,        }     }    useEffect(() => {        console.log(ScaleRef.current.newScale)     }, [ScaleRef.current]) // 这样不打印    }, [ScaleRef]) // 这样不打印    }, [ScaleRef.current.newScale]) // 这样不打印
    <ScStage ref={stageRef} onWheel={handleWheel} />

其实我是想让 ScaleRef.current.newScale发生变化的时候传给子组件,让子组件重新渲染,但是发现ScaleRef.current.newScale这玩意监听不到它的变化

共有2个答案

蒋向笛
2024-01-29

如果想监听变化的,还是用useState()

贺博厚
2024-01-29

两个误区吧:

  • 尽量不要把 useEffect 当作一个 “监听器” 来使用
  • useRef 保存的内容不随着组件的每次渲染而更新。在 useEffect 逻辑里,第二个参数里传 ref 相关的值,这种使用方式不太对。

解决思路:在更新 ScaleRef.current 的地方,直接写 useEffect 里的逻辑即可(有全量代码的话,视情况而定)。

 类似资料:
  • ap.onNetworkChange(CALLBACK) 监听网络环境发生变化的事件。 CALLBACK 参数说明 和ap.getNetworkType()返回值一致 名称 类型 描述 networkAvailable Boolean 网络是否可用 networkType String 网络类型值 UNKNOWN / NOTREACHABLE / WIFI / 3G / 2G / 4G / WWA

  • 如何监听data里面的所有age的长度是否为0,所有age的长度为0则返回true,否则返回false

  • 本文向大家介绍React中如何监听state的变化?相关面试题,主要包含被问及React中如何监听state的变化?时的应答技巧和注意事项,需要的朋友参考一下 16.x 之前使用componentWillReveiveProps componentWillReceiveProps (nextProps){ if(this.props.visible !== nextProps.visible){

  • 我有一个文件 这个类是一个独立的文件, 这个类被多个其他文件所引用 如何提前hack这个类 让他每次实例化的时候回调给我, 让我知道他实例化了从而运行一些实例化的代码

  • 本文向大家介绍node.js 如何监视文件变化,包括了node.js 如何监视文件变化的使用技巧和注意事项,需要的朋友参考一下 fs.FSWatcher fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修改时,实例会触发事件调用回调函数 fs.watch() fs.watch(f

  • vue(js)如何监听一个json对象是否发生了改变? 判断条件: 1、只比较初值和最终值,如改动后再改回去则相当于未改变 2、忽略key的顺序,如{"a":1,"b":2},{"b":2,"a":1} 相当于未发生改变