gpt4 book ai didi

javascript - 父级更新会导致上下文使用者重新安装?

转载 作者:行者123 更新时间:2023-12-02 23:54:08 25 4
gpt4 key购买 nike

我有一个包装器组件,它创建一个上下文使用者并将上下文值作为 Prop 传递给处理程序组件。当包装器组件的父级更新时,它会导致我的处理程序组件重新安装而不仅仅是更新。

const Wrapper = forwardRef((props, ref) => {
class ContextHandler extends Component {
componentDidMount() {
// handle the context as a side effect
}

render() {
const { data, children } = this.props;
return (
<div ref={ref} {...data}>{children}</div>
);
}
}
return (
<Context.Consumer>
{
context => (
<ContextHandler
data={props}
context={context}
>
{props.children}
</ContextHandler>
)
}
</Context.Consumer>
);
});

我将包装器放在父组件内:

class Parent extends Component {

state = {
toggle: false
}

updateMe = () => {
this.setState(({toggle}) => ({toggle: !toggle}))
}

render() {
const { children, data } = this.props;
return (
<Wrapper
onClick={this.updateMe}
{...data}
ref={me => this.node = me}
>
{children}
</Wrapper>
)
}
}

当我单击Wrapper 并导致Parent 中的更新时,ContextHandler 组件会重新安装,从而导致其状态重置。它应该只是更新/协调和维护状态。

我在这里做错了什么?

最佳答案

您的 ContextHandler 类是在 Wrapper 组件的渲染函数中实现的,这意味着将在每次渲染时创建一个全新的实例。要解决您的问题,请将 ContextHandler 的实现从 Wrapper 的渲染函数中提取出来。

关于javascript - 父级更新会导致上下文使用者重新安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com