gpt4 book ai didi

javascript - 高阶组件不触发 ReactJS 中的包装器渲染

转载 作者:行者123 更新时间:2023-11-30 14:26:20 24 4
gpt4 key购买 nike

我正在使用一个高阶组件,它不会在渲染更改时渲染子组件。为简单起见,以下代码已被删减。

看起来像这样的 HOC:

const withMyComponent = (WrapperComponent) => {
class HOC extends Component {
state = {
value: ''
};

changedHandler = (event) => {
this.setState({ value: event.target.value });
};

render() {
return (<WrapperComponent {...this.props}
changed={this.changedHandler}
value={this.state.value} />);
}
};

return HOC;
};

export default withMyComponent;

然后我有一个使用这个 HOC 的子组件:

class myChildComponent extends Component {
render() {
return (
<input type="text"
onChange={(event) => this.props.changed(event)}
value={this.props.value || ''} />
);
};
};

export default withMyComponent(myChildComponent);

我遇到的问题是 input 没有使用从 HOC 传回的新值进行更新。事实上,子渲染甚至在初始安装后都没有触发,而且似乎没有在任何更改的事件上触发。

我已经在 HOC 渲染中放置了调试和 console.logs 并且更改的事件和渲染正在使用正确的数据触发。

因此,如果我在文本框中键入内容,它会在 HOC 中触发更改事件并更新 HOC 中的状态,并在 HOC 中触发渲染事件。但它不会触发包装的组件渲染事件,因此文本框永远不会更新任何值。

谁能解决这个问题或引导我朝着正确的方向前进?

再次感谢。

最佳答案

你需要传递一个对象给this.setState

const withMyComponent = WrapperComponent => {
class HOC extends Component {
state = {
value: ""
};

changedHandler = event => {
// Instead of
// this.setState( value: event.target.value );

// Do This.
this.setState({ value: event.target.value });
};

render() { ... }
}

return HOC;
};

工作演示

Edit zq6vk36z3m

关于javascript - 高阶组件不触发 ReactJS 中的包装器渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51884746/

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