小编ove*_*b60的帖子

反应挂钩useEffect依赖数组

我试图把头缠在新的react钩子api上。具体来说,我正在尝试构建一次经典的用例:

componentDidUpdate(prevProps) {
    if (prevProps.foo !== this.props.foo) {
        // animate dom elements here...
        this.animateSomething(this.ref, this.props.onAnimationComplete);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试使用功能组件和构建相同的组件useEffect,但不知道如何实现。这是我尝试的:

useEffect(() => {
    animateSomething(ref, props.onAnimationComplete);
}, [props.foo]);
Run Code Online (Sandbox Code Playgroud)

这样,仅在props.foo更改时才调用效果。那确实有效–但是!由于将其eslint-plugin-react-hooks标记为错误,因此它似乎是反模式。效果内使用的所有依赖项都应在依赖项数组中声明。因此,这意味着我必须执行以下操作:

useEffect(() => {
    animateSomething(ref, props.onAnimationComplete);
}, [props.foo, ref, props.onAnimationComplete]);
Run Code Online (Sandbox Code Playgroud)

但这不会导致掉毛错误,但完全无法实现props.foo更改时调用效果的目的。我不希望在其他道具或裁判改变时调用它。

现在,我读到一些有关使用useCallback这种包装的信息。我试过了,但没有得到进一步的解决。

有人可以帮忙吗?

javascript reactjs react-hooks

28
推荐指数
1
解决办法
1万
查看次数

Vue & Typescript:如何在访问子组件的方法时避免 TS 错误

我已经创建了一个自定义的基于类的 vue 组件,我正在尝试从父组件访问它的方法和/或计算属性。Vue Docs 中有一个示例解释了我正在尝试做的事情(https://vuejs.org/v2/guide/components-edge-cases.html#Accessing-Child-Component-Instances-amp-Child-元素)。所以基本上就是这个

class ParentComponent extends Vue {
    someMethod() {
        (this.$refs.myChildRef as ChildComponent).focus()
    }
}

class ChildComponent extends Vue {
    focus() {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这会导致 TS 错误:“TS2339:属性 'focus' 在类型 'Vue' 上不存在”

很明显,打字稿没有看到我的 ChildComponent 有其他方法。

尽管如此,该代码在运行时仍然有效,所以它似乎只是一个打字稿问题。

有谁知道如何解决这个问题?

typescript vue.js

6
推荐指数
1
解决办法
4604
查看次数

标签 统计

javascript ×1

react-hooks ×1

reactjs ×1

typescript ×1

vue.js ×1