Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用useEffect钩子实现复杂的shouldComponentUpdate?_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 如何使用useEffect钩子实现复杂的shouldComponentUpdate?

Javascript 如何使用useEffect钩子实现复杂的shouldComponentUpdate?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个容器组件,我想将其转换为功能组件并使用react挂钩,比如useffect。但是,我有一个相当复杂的shouldComponentUpdate函数,它根据当前的道具和状态以及下一个道具和状态执行一些逻辑,以防止不必要的渲染 以下是我的shouldComponentUpdate函数: shouldComponentUpdate(nextProps, nextState) { const { current, id, language: { isRtl }, query: { res

我有一个容器组件,我想将其转换为功能组件并使用react挂钩,比如useffect。但是,我有一个相当复杂的shouldComponentUpdate函数,它根据当前的道具和状态以及下一个道具和状态执行一些逻辑,以防止不必要的渲染

以下是我的shouldComponentUpdate函数:

shouldComponentUpdate(nextProps, nextState) {
    const { current, id, language: { isRtl }, query: { response: { cookie, hits } } } = this.props;
    if (nextProps.language.isRtl !== isRtl) {
        return true;
    }
    const { selected } = this.state;
    if (current !== nextProps.current) {
        if  (id === nextProps.current) {
            if  (nextProps.direction !== 0) {
                this.select(nextProps.direction > 0 ? 0 : hits.length - 1, true);
                return false;
            }
        } else {
            if (selected >= 0) {
                this.setState({ selected: -1 });
            }
            return false;
        }
    }
    if (cookie === null && nextState.selected !== selected) {
        const redrawHit = (index, className) => {
            if (index >= 0) {
                hits[index].ref.current.updateState({ className });
            }
        };
        redrawHit(nextState.selected, 'hit-selected');
        redrawHit(selected, 'hit-deselected');
    }
    return cookie !== null;
}

我无法找到一种通过useEffect钩子实现它的正确方法。有人能帮我吗?

你没有。首先,功能组件没有任何类似于
nextState
nextProps
的东西,它们只有当前的
状态
道具
,您可以记住/存储以前的道具。但是当您访问它们时,您已经在渲染函数中了。使代码真正难以翻译的是,您的
shouldComponentUpdate
方法有副作用,它更新
状态并调用其他方法。所有这些都必须在FC的
render
方法中,因为FC基本上只是一个大的
render
方法。FC不是所有问题的解决方案。也许您希望将当前组件中的代码分解为多个较小的组件,然后组合它们。或者你带我们看全班,也许我们可以推荐另一种方法。嗨@Thomas,谢谢你的回复。整个班级都太大了,不能容纳在这里。你能给我一封电子邮件让我把它发给你吗?“整个班级都太大了,不能放在这里。”然后你当然应该把它分开。你如何保持监督?“你能给我发封电子邮件让我给你吗?”不,我不这么做。这里的潜“安排”是人们在他们想要的时候回答,如果他们想要的话。我不会把它变成一个伪顾问关系。如果你担心大班会把问题弄得一团糟,你可以把它放在一个(隐藏的)片段中。或者你可以用相关的部分创建一个片段/提琴/笔。试着阅读一下,看看这是否符合你的要求,这可能会解决你的问题。你没有。首先,功能组件没有任何类似于
nextState
nextProps
的东西,它们只有当前的
状态
道具
,您可以记住/存储以前的道具。但是当您访问它们时,您已经在渲染函数中了。使代码真正难以翻译的是,您的
shouldComponentUpdate
方法有副作用,它更新
状态并调用其他方法。所有这些都必须在FC的
render
方法中,因为FC基本上只是一个大的
render
方法。FC不是所有问题的解决方案。也许您希望将当前组件中的代码分解为多个较小的组件,然后组合它们。或者你带我们看全班,也许我们可以推荐另一种方法。嗨@Thomas,谢谢你的回复。整个班级都太大了,不能容纳在这里。你能给我一封电子邮件让我把它发给你吗?“整个班级都太大了,不能放在这里。”然后你当然应该把它分开。你如何保持监督?“你能给我发封电子邮件让我给你吗?”不,我不这么做。这里的潜“安排”是人们在他们想要的时候回答,如果他们想要的话。我不会把它变成一个伪顾问关系。如果你担心大班会把问题弄得一团糟,你可以把它放在一个(隐藏的)片段中。或者你可以创建一个只包含相关部分的片段/提琴/笔。试着阅读一下,看看这是否符合你的要求,这可能会解决你的问题。